本帖最后由 破碎旗帜 于 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反而不是大问题。 |
破碎旗帜 发表于 2025-10-17 06:33 啊,找大佬帮我修好的,我把修好的插件发给你吧 //============================================================================= // 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); }; })(); |
lek 发表于 2025-7-1 14:49 敲门~ 同款插件,版本2.6.3,Bro怎么解决的? 难道真就在游戏一开始的时候把所有立绘图全部以0透明放出来? 我这里最初期也有上百张图,之后要是做大了估计还会继续翻倍,真的不会炸吗? |
| 问题已解决,感谢大佬回答 |
congwsbn 发表于 2025-6-30 21:11 那请问用这个插件该怎么做?我这个插件是用文本显示图片的,没有改图片不透明度这一选项 |
本帖最后由 rica 于 2025-7-1 05:25 编辑 lek 发表于 2025-6-30 10:47 好方法,流暢好多,謝謝 ![]() |
|
求問+1, 我沒有用立繪插件,但下一句對話更換時,圖片都一樣有相同問題 |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2026-6-5 03:39
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.