设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 598|回复: 10
打印 上一主题 下一主题

[有事请教] 求助,关于立绘插件的小瑕疵

[复制链接]

Lv1.梦旅人

梦石
0
星屑
123
在线时间
19 小时
注册时间
2025-6-16
帖子
8
跳转到指定楼层
1
发表于 2025-6-29 21:42:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
20星屑
找了一个功能全,操作不复杂的立绘插件,还挺中意的,但是有一个问题:该插件虽然可以通过立绘的切换来达成切换表情的效果但是过每一段对话切换表情时立绘都有可能闪一下
求帮助!

LL_StandingPictureMV.zip

8.94 KB, 下载次数: 5

最佳答案

查看完整内容

M系列图片都需要预加载,就是预先显示不透明度0的图片,调用时改不透明度,不然就会闪一下,这是引擎自带的老问题惹

Lv5.捕梦者 (超级版主)

梦石
18
星屑
12975
在线时间
2124 小时
注册时间
2012-12-12
帖子
567
2
发表于 2025-6-29 21:42:01 | 只看该作者
M系列图片都需要预加载,就是预先显示不透明度0的图片,调用时改不透明度,不然就会闪一下,这是引擎自带的老问题惹

点评

這方法也不錯 (good)  发表于 2025-7-1 05:31

葱兔の游戏列表 (´・ω・`)
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1709
在线时间
159 小时
注册时间
2022-11-30
帖子
50
3
发表于 2025-6-30 03:25:38 | 只看该作者
求問+1,
我沒有用立繪插件,但下一句對話更換時,圖片都一樣有相同問題
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
123
在线时间
19 小时
注册时间
2025-6-16
帖子
8
4
 楼主| 发表于 2025-6-30 10:47:05 | 只看该作者
本帖最后由 lek 于 2025-6-30 10:50 编辑
rica 发表于 2025-6-30 03:25
求問+1,
我沒有用立繪插件,但下一句對話更換時,圖片都一樣有相同問題


这个可以通过更改图片编号解决,具体操作如下

QQ20250630-104346.png (64.45 KB, 下载次数: 29)

QQ20250630-104346.png
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1709
在线时间
159 小时
注册时间
2022-11-30
帖子
50
5
发表于 2025-7-1 05:20:30 | 只看该作者
本帖最后由 rica 于 2025-7-1 05:25 编辑
lek 发表于 2025-6-30 10:47
这个可以通过更改图片编号解决,具体操作如下


好方法,流暢好多,謝謝


回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
123
在线时间
19 小时
注册时间
2025-6-16
帖子
8
6
 楼主| 发表于 2025-7-1 11:46:43 | 只看该作者
congwsbn 发表于 2025-6-30 21:11
M系列图片都需要预加载,就是预先显示不透明度0的图片,调用时改不透明度,不然就会闪一下,这是引擎自带的 ...

那请问用这个插件该怎么做?我这个插件是用文本显示图片的,没有改图片不透明度这一选项
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
123
在线时间
19 小时
注册时间
2025-6-16
帖子
8
7
 楼主| 发表于 2025-7-1 14:49:02 | 只看该作者
问题已解决,感谢大佬回答
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
796
在线时间
82 小时
注册时间
2023-4-16
帖子
10
8
发表于 2025-10-17 06:33:24 | 只看该作者
lek 发表于 2025-7-1 14:49
问题已解决,感谢大佬回答

敲门~
同款插件,版本2.6.3,Bro怎么解决的?
难道真就在游戏一开始的时候把所有立绘图全部以0透明放出来?
我这里最初期也有上百张图,之后要是做大了估计还会继续翻倍,真的不会炸吗?
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
123
在线时间
19 小时
注册时间
2025-6-16
帖子
8
9
 楼主| 发表于 2025-10-21 16:58:14 | 只看该作者
破碎旗帜 发表于 2025-10-17 06:33
敲门~
同款插件,版本2.6.3,Bro怎么解决的?
难道真就在游戏一开始的时候把所有立绘图全部以0透明放出来 ...

啊,找大佬帮我修好的,我把修好的插件发给你吧
//=============================================================================
// RPGツクールMV - LL_GalgePauseSignMV.js v1.0.2
//-----------------------------------------------------------------------------
// ルルの教会 (Lulu's Church)
// https://nine-yusha.com/
//
// URL below for license details.
// https://nine-yusha.com/plugin/
//=============================================================================

/*:
* @target MV
* @plugindesc ノベルゲーム風改行カーソルプラグイン
* @author ルルの教会
* @url https://nine-yusha.com/plugin-galgepausesign/
*
* @help LL_GalgePauseSignMV.js
*
* ノベルゲーム風の改行カーソルを表示します。
* カーソル用画像は、1枚のみでOKです。
* アニメーション用のコマ送り画像を用意する必要はありません。
*
* プラグインコマンドはありません。
*
* 利用規約:
*   ・著作権表記は必要ございません。
*   ・利用するにあたり報告の必要は特にございません。
*   ・商用・非商用問いません。
*   ・R18作品にも使用制限はありません。
*   ・ゲームに合わせて自由に改変していただいて問題ございません。
*   ・プラグイン素材としての再配布(改変後含む)は禁止させていただきます。
*
* 作者: ルルの教会
* 作成日: 2021/8/15
*
* @param imageName
* @text 画像ファイル名
* @desc 改行カーソルとして表示する画像ファイルです。
* 24px~36pxの正方形サイズを推奨します。
* @dir img/system
* @type file
* @require 1
*
* @param animation
* @text アニメーション
* @desc 改行カーソル表示時のアニメーションです。
* @type select
* @default vertical
* @option なし
* @value none
* @option 上下
* @value vertical
* @option 左右
* @value horizontal
* @option 点滅
* @value blinking
* @option ズーム
* @value zoom
* @option 回転
* @value rotation
* @option ジャンプ
* @value jumping
* @option 流れ星
* @value shootingstar
*
* @param positionType
* @text 表示位置
* @desc 改行カーソルの表示位置です。
* @type select
* @default centerBottom
* @option 左下
* @value leftBottom
* @option 中央
* @value centerBottom
* @option 右下
* @value rightBottom
* @option テキスト末尾
* @value textEnd
*
* @param positionX
* @text X座標
* @desc 表示位置(X)の調整値です。(初期値: 0)
* +で右へ、-で左へ調整します。
* @default 0
* @min -2000
* @max 2000
* @type number
*
* @param positionY
* @text Y座標
* @desc 表示位置(X)の調整値です。(初期値: 0)
* +で下へ、-で上へ調整します。
* @default 0
* @min -2000
* @max 2000
* @type number
*/

(function() {
    "use strict";
    var pluginName = "LL_GalgePauseSignMV";

    var parameters = PluginManager.parameters(pluginName);
    var animation = String(parameters["animation"] || "vertical");
    var imageName = String(parameters["imageName"] || "");
    var positionType = String(parameters["positionType"] || "centerBottom");
    var positionX = Number(parameters["positionX"] || 0);
    var positionY = Number(parameters["positionY"] || 0);


    var _Window_Message_startPause = Window_Message.prototype.startPause;
    Window_Message.prototype.startPause = function() {
        _Window_Message_startPause.apply(this, arguments);

        this._refreshPauseSign();
    };

    Window_Message.prototype._refreshPauseSign = function() {
        var sx = 144;
        var sy = 96;
        var p = 24;

        // カーソル画像読み込み
        if (imageName) {
            this._windowPauseSignSprite.bitmap = ImageManager.loadSystem(imageName);
        } else {
            this._windowPauseSignSprite.bitmap = this._windowskin;
            this._windowPauseSignSprite.setFrame(sx, sy, p, p);
        }

        this._windowPauseSignSprite.anchor.x = 0.5;
        this._windowPauseSignSprite.anchor.y = 0.5;

        // 画像が読み込まれたあとに実行
        this._windowPauseSignSprite.bitmap.addLoadListener(function() {
            switch (positionType) {
                case "leftBottom":
                    this._windowPauseSignSprite.move((this._windowPauseSignSprite.width / 2) + positionX + this.padding, this._height - (this._windowPauseSignSprite.height / 2) + positionY - (this.padding / 2));
                    break;
                case "centerBottom":
                    this._windowPauseSignSprite.move((this._width / 2) + positionX, this._height - (this._windowPauseSignSprite.height / 2) + positionY);
                    break;
                case "rightBottom":
                    this._windowPauseSignSprite.move(this._width - (this._windowPauseSignSprite.width / 2) + positionX - this.padding, this._height - (this._windowPauseSignSprite.height / 2) + positionY - (this.padding / 2));
                    break;
                case "textEnd":
                    if (this._textState) {
                        var textStateCalcY = this._textState.outputHeight - this._textState.height + this._textState.height;
                        if (textStateCalcY < this._textState.height) textStateCalcY = this._textState.height;
                        this._windowPauseSignSprite.move(this._textState.x + (this._windowPauseSignSprite.width / 2) + this.padding + positionX, textStateCalcY + positionY);
                    } else {
                        this._windowPauseSignSprite.move((this._width / 2) + positionX, this._height - (this._windowPauseSignSprite.height / 2) + positionY);
                    }
                    break;
            }
        }.bind(this));

        this._windowPauseSignSprite.alpha = 0;
        this._windowPauseSignSprite.animationCount = 0;

    };

    Window_Message.prototype._updatePauseSign = function() {
        var sprite = this._windowPauseSignSprite;
        if (!this.pause) {
            sprite.alpha = 0;
        }
        sprite.visible = this.isOpen();
    };

    var _Window_Message_update = Window_Message.prototype.update;
    Window_Message.prototype.update = function() {
        _Window_Message_update.apply(this, arguments);

        // カーソルアニメーション
        if (this.pause && this._windowPauseSignSprite) {
            this._animationPauseSign();
        }
    };

    Window_Message.prototype._animationPauseSign = function() {
        var sprite = this._windowPauseSignSprite;
        switch (animation) {
            case "vertical":  // 上下
                if (sprite.animationCount === 0) {
                    sprite.opacity = 255;
                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 31) {
                    sprite.y += 0.25;
                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 61) {
                    sprite.y -= 0.25;
                    sprite.animationCount += 1;
                } else if (this._windowPauseSignSprite.animationCount === 61) {
                    sprite.animationCount = 0;
                }
                break;
            case "horizontal":  // 左右
                if (sprite.animationCount === 0) {
                    sprite.opacity = 255;
                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 31) {
                    sprite.x += 0.25;
                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 61) {
                    sprite.x -= 0.25;
                    sprite.animationCount += 1;
                } else if (this._windowPauseSignSprite.animationCount === 61) {
                    sprite.animationCount = 0;
                }
                break;
            case "blinking":  // 点滅
                if (sprite.animationCount === 0) {
                    sprite.opacity = 255;
                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 31) {
                    sprite.opacity -= 255 / 30;
                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 61) {
                    sprite.opacity += 255 / 30;
                    sprite.animationCount += 1;
                } else if (this._windowPauseSignSprite.animationCount === 61) {
                    sprite.animationCount = 0;
                }
                break;
            case "zoom":  // ズーム
                if (sprite.animationCount === 0) {
                    sprite.opacity = 255;
                    sprite.scale.x = 1;
                    sprite.scale.y = 1;
                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 31) {
                    sprite.scale.x += 0.5 / 30;
                    sprite.scale.y += 0.5 / 30;
                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 61) {
                    sprite.scale.x -= 0.5 / 30;
                    sprite.scale.y -= 0.5 / 30;
                    sprite.animationCount += 1;
                } else if (this._windowPauseSignSprite.animationCount === 61) {
                    sprite.animationCount = 0;
                }
                break;
            case "rotation":  // 回転
                sprite.opacity = 255;
                sprite.rotation += 1 / 30;
                break;
            case "jumping":  // ジャンプ
                if (sprite.animationCount === 0) {
                    sprite.opacity = 255;
                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 16) {
                    sprite.y -= 0.5;
                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 31) {
                    sprite.y += 0.5;
                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 61) {
                    sprite.animationCount += 1;
                } else if (this._windowPauseSignSprite.animationCount === 61) {
                    sprite.animationCount = 0;
                }
                break;
            case "shootingstar":  // 流れ星
                if (sprite.animationCount === 0) {
                    sprite.scale.x = 0;
                    sprite.scale.y = 0;
                    sprite.rotation = 1.5;

                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 31) {
                    sprite.opacity = 255;
                    sprite.scale.x += 1 / 30;
                    sprite.scale.y += 1 / 30;
                    sprite.rotation -= 1.5 / 30;

                    sprite.animationCount += 1;
                } else if (sprite.animationCount < 61) {
                    sprite.opacity -= 10;
                    sprite.animationCount += 1;
                } else if (this._windowPauseSignSprite.animationCount === 61) {
                    sprite.animationCount = 0;
                }
                break;
            default:
                sprite.opacity = 255;
        }
    };


    // for MV
    var _Window_Message_startMessage = Window_Message.prototype.startMessage;
    Window_Message.prototype.startMessage = function() {
        _Window_Message_startMessage.apply(this, arguments);

        // textStateにstartYとoutputHeightを追加
        this._textState.startY = this._textState.y;
        this._textState.outputHeight = 0;
    };

    var _Window_Message_processCharacter = Window_Message.prototype.processCharacter;
    Window_Message.prototype.processCharacter = function(textState) {
        this._textState.outputHeight = textState.y - textState.startY + textState.height;

        _Window_Message_processCharacter.apply(this, arguments, textState);
    };
})();
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
796
在线时间
82 小时
注册时间
2023-4-16
帖子
10
10
发表于 2025-10-21 20:53:32 | 只看该作者
本帖最后由 破碎旗帜 于 2025-10-21 21:08 编辑
lek 发表于 2025-10-21 16:58
啊,找大佬帮我修好的,我把修好的插件发给你吧
//===================================================== ...


谢了bro,可惜我自己先摸出了一道小偏方,暂时解决了眼下的问题,不过还是插个眼,或许以后需要呢?

完全不懂代码的baka偏方:
用DU大佬的计时器在每次开始游戏之后,通过公共事件仅一次开启GALV的预加载插件,把常用的立绘预加载,不常用的在需要的时候再用脚本部分追加。
如果只用预加载插件的话,要么堆积重复加载可能爆内存,(没试过,但用公共事件并行不停循环加载,或者玩家不停换存档的话理论是存在这种可能)
要么存档因为没有后续预加载而失效。GALV的脚本是单次加载,并非自动。
最麻烦的莫过于逐张图片名录入,不过我还是花大时间搞了,后续的立绘等画完之后会照此按这种方式继续追加进去。

现在我头疼的是,到底继续用旧版,还是换她家可上8人立绘的新版好。
用新的吧,打F4比打FFFF方便一小点,有图片分级处理前后就不用每次都让一三位二四位交换然后AA,但问题在于,新版的AA逻辑好像不太一样,不是在上一段对话之后简单地调出添加图片或者替换,而是每段都重置AA全亮,必须要指定谁亮谁暗。
要用新的话,我得把全部文本修一遍,手头做的小游戏属于重故事情节的,文本量哪怕只有现在的都挺多的,何况还有各种选择各种情景下的差异对话,工程量肉眼可见的巨大。
继续用旧的吧,没有图片层级细调,不知道后续会不会和别的图片类插件冲突,4人还是8人,打F4还是FFFF反而不是大问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-11-18 12:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表