【解決済み】メッセージが終了した時を検知したい。非同期処理?

アバター
DoujinRuis
記事: 136
登録日時: 2022年10月25日(火) 10:59

【解決済み】メッセージが終了した時を検知したい。非同期処理?

投稿記事by DoujinRuis » 2024年4月22日(月) 15:11

お世話になっております。DoujinRuisです
今日は私から質問です。

メッセージが終了したタイミングで変数操作をしたいです。
メッセージA
変数操作A
メッセージB
変数操作B
メッセージC

変数操作がバックグラウンドで処理してしまう為、メッセージの完了を待たずに変数操作Bまで実行されてしまいます。非同期処理で対処すべきなのか、もっといい方法があるのかご存じの方いたら教えてください

isBusy() ダメでした

window.gameMessageAdd = function(message){
return new Promise((resolve) => {
$gameMessage.add(message);
$gameMessage.newPage(); // 新しいページを開始
const checkMessageFinished = () => {
if ( ) { ///////////////////////////←左の条件式さえうまくいけばどうにかなりそう?/////////////////////////////
resolve(); // メッセージの表示が終了したらプロミスを解決
} else {
setTimeout(checkMessageFinished, 100); // まだ表示中なら100ミリ秒後に再チェック
}
};
checkMessageFinished(); // 最初のチェックを実行
});
};

gameMessageAdd(`メッセージを表示しました`)
.then(() => {
  window.val = 1;
});
最後に編集したユーザー DoujinRuis on 2024年4月23日(火) 09:17 [ 編集 2 回目 ]

普段Youtubeで同人ゲームの情報を発信しています
https://www.youtube.com/channel/UCQV4_A ... ZxTrkLKbyg

Twitter
https://twitter.com/kQ1NG4MmNGK1lRw
basu
記事: 3
登録日時: 2024年3月29日(金) 00:34

Re: メッセージが終了した時を検知したい。非同期処理?

投稿記事by basu » 2024年4月22日(月) 18:13

こんにちは
メッセージを終了した際の検知方法ですが、Window_MessageのonEndOfText関数は使えないでしょうか?

const _Window_Message_OnEndOfText = Window_Message.prototype.onEndOfText;
Window_Message.prototype.onEndOfText = function () {
_Window_Message_OnEndOfText.apply(this, arguments);

if (this._textState === null && 何かしらの判定) {
console.log("メッセージ完了後処理");

// メッセージ完了後、変数1を1ずつ加算
const value = $gameVariables.value(1);
$gameVariables.setValue(1, value + 1);
}
};

1ページ毎のメッセージ完了後にtextStateをNullに更新しているので、ここで判定ができるかと思います。
キー入力待ちなどのメッセージ待機中も完了するまでtextStateの更新は行われません。

ただ、バトルログなどのメッセージからも呼ばれているので何かしらの判定が必要となります。
また、やりたいことと意図が違った場合はスルーしてください。

よろしくお願いします。
アバター
DoujinRuis
記事: 136
登録日時: 2022年10月25日(火) 10:59

Re: メッセージが終了した時を検知したい。非同期処理?

投稿記事by DoujinRuis » 2024年4月22日(月) 20:13

basuさん返信ありがとうございます。
早速試してみます
普段Youtubeで同人ゲームの情報を発信しています
https://www.youtube.com/channel/UCQV4_A ... ZxTrkLKbyg

Twitter
https://twitter.com/kQ1NG4MmNGK1lRw
アバター
DoujinRuis
記事: 136
登録日時: 2022年10月25日(火) 10:59

Re: メッセージが終了した時を検知したい。非同期処理?

投稿記事by DoujinRuis » 2024年4月23日(火) 09:16

経過報告です。

onEndOfText関数を使用してメッセージ後に処理を挟むという方法は現状できませんでした。
下を見る限り出来そうな気がしたんですが
全てのメッセージ終了後にNULLになっている?

作業が止まりそうなので
別でイベントコマンドを挟む設計の物を進めようかと思います。

basuさんのおかげで将来的に出来そうな気がしますので、
一旦解決とさせて頂きます。

Window_Message.prototype.onEndOfText = function() {
if (!this.startInput()) {
if (!this._pauseSkip) {
this.startPause();
} else {
this.terminateMessage();
}
}
this._textState = null;
};
普段Youtubeで同人ゲームの情報を発信しています
https://www.youtube.com/channel/UCQV4_A ... ZxTrkLKbyg

Twitter
https://twitter.com/kQ1NG4MmNGK1lRw
アバター
くろうど
記事: 265
登録日時: 2016年1月22日(金) 20:52
お住まい: 東京都
連絡を取る:

Re: 【解決済み】メッセージが終了した時を検知したい。非同期処理?

投稿記事by くろうど » 2024年4月23日(火) 15:16

一旦解決となっているようなのですが、
念のため、私の場合についてだけ記述しておきます。

Window_Message.prototype.terminateMessage

要件に不明な点があるのでコレで解決するかは分かりませんが、
私の場合は上記の terminateMessage に処理を追加することで、
メッセージ終了時に処理を追加できました。
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
アバター
DoujinRuis
記事: 136
登録日時: 2022年10月25日(火) 10:59

Re: 【解決済み】メッセージが終了した時を検知したい。非同期処理?

投稿記事by DoujinRuis » 2024年4月23日(火) 16:13

おぉ、くろうどさん
返信ありがとうございます。


window_messageクラスを勉強すればいけそうな気がします。
参考にさせて頂きます
普段Youtubeで同人ゲームの情報を発信しています
https://www.youtube.com/channel/UCQV4_A ... ZxTrkLKbyg

Twitter
https://twitter.com/kQ1NG4MmNGK1lRw

“MZ:質問” へ戻る