【解決】Window_Message でテキストの幅を取得したい
Posted: 2021年11月08日(月) 23:07
可変サイズの Window_Message を作成しようと試みていて、文字列の幅を取得したいのですが
Window_Message 内で textSizeEx を実行すると制御文字がデコード・実行されて
入力待ちやウェイトの制御文字が余計に実行されてしまうらしいことがわかりました。
トレースをみると
となっていて
が表示タイミング関連の制御文字を扱っているようなので
これを使わずに
が実行されるようにすればよさそうな気がするのですが
関数がどの関数から呼ばれたかで処理分けはできないらしいのでどうしたものか…
どこをどう修正するのがよさそうかアドバイスを頂けないでしょうか。
以下、困ってることの再現手順
↾のプラグインをいれて
を実行すると
が得られて、これは期待通りなものの
\! があることによっていきなり入力待ちから始まり、空ウィンドウが表示されてしまいます。
Window_Message 内で textSizeEx を実行すると制御文字がデコード・実行されて
入力待ちやウェイトの制御文字が余計に実行されてしまうらしいことがわかりました。
トレースをみると
コード: 全て選択
Window_Message.processEscapeCharacter @ rmmz_windows.js:5154
Window_Base.processControlCharacter @ rmmz_windows.js:336
Window_Message.processControlCharacter @ rmmz_windows.js:5091
Window_Base.processCharacter @ rmmz_windows.js:324
Window_Base.processAllText @ rmmz_windows.js:261
Window_Base.textSizeEx @ rmmz_windows.js:236
コード: 全て選択
Window_Message.processEscapeCharacter
これを使わずに
コード: 全て選択
Window_Base.processEscapeCharacter
関数がどの関数から呼ばれたかで処理分けはできないらしいのでどうしたものか…
どこをどう修正するのがよさそうかアドバイスを頂けないでしょうか。
以下、困ってることの再現手順
コード: 全て選択
(() => {
"use strict";
const _Window_Message_startMessage = Window_Message.prototype.startMessage;
Window_Message.prototype.startMessage = function() {
_Window_Message_startMessage.call(this);
console.log(this.textSizeEx(this._textState.text));
};
})();
コード: 全て選択
◆文章:なし, なし, ウィンドウ, 下
: :あああ\{あああ\}\!
: :いいいい
コード: 全て選択
{width: 192, height: 48}
\! があることによっていきなり入力待ちから始まり、空ウィンドウが表示されてしまいます。