イベント内部で実行したコモンイベントから元のイベントのx, y座標を取得する方法

ppp
記事: 43
登録日時: 2022年9月28日(水) 21:50

イベント内部で実行したコモンイベントから元のイベントのx, y座標を取得する方法

投稿記事by ppp » 2023年11月29日(水) 03:21

質問失礼します。コモンイベントを用いて、イベントを一括で整理できるようにしているのですが、イベント内でコモンイベントを実行して、そのコモンイベントの中でthis.character().xなど入力するとエラーが発生してしまいます。これはおそらく、コモンイベント自体の座標を求めようとしてしまったために起こっているのだと思いますが、コモンイベントから呼び出し元のイベントの座標を取得する方法があればご教授願います。
(トリアコンタン様のテンプレートイベントプラグインの呼び出し元マップのイベントでコモンイベントを使用しています)

アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: イベント内部で実行したコモンイベントから元のイベントのx, y座標を取得する方法

投稿記事by Plasma Dark » 2023年11月29日(水) 10:50

まず、エラーの原因をしっかり確認し、分析しましょう。
スタックトレースを確認してください。

Game_Interpreter.prototype.character 関数を読んで、その戻り値がnullになる原因を認識してください。
イベントからコモンイベントを呼び出しただけでは、nullにはなりません。

何らかの原因で、Game_Interpreterインスタンスの持つ_mapId, _eventIdがそれぞれ、現在いるマップで起動したイベントのIDになっていないのだと思われます。
この原因を明らかにした上で解決策を検討する必要があります。
使用しているプラグインやイベントの起動方法を確認してください。
Game_Interpreter.prototype.setup にブレークポイントを設定し、対象のイベントやそこから呼び出されるコモンイベントが起動した際に何がどこから渡されたのか確認するのが手っ取り早いと思います。

F12を押して開発者コンソールを開き、該当行の番号をクリックすることでブレークポイントを設定できます。
処理が設定したブレークポイントに到達するとそこで止まります。
Watchにその時点での結果を確認したい式を入力することで、スクショのように値を確認できます。

もちろん、VSCodeなどでステップ実行できるならそれでも構いません。
古いのでそのまま使えるものではありませんが、VSCodeでローカルデバッグをする際は以下の記事が参考になります。
(Debugger for Chromeはもう使わないので不要である、など、当時とは状況が変わっている部分があるので参考までに)
https://qiita.com/Mihiraghi/items/a68440e597373aabba02

そして、質問の際は確認した情報をしっかり共有するようにしてください。
使用しているプラグインの名前、配布元URL、バージョンはもちろん、新規プロジェクトで状況を再現するための試行錯誤を行って、その結果がどうであったかも重要です。
今回の例で言えば、イベントから呼び出したコモンイベントの中で this.character().x を呼び出すだけの新規プロジェクトを作って動かせば、原因の調査に大いに役立ったはずですね。
添付ファイル
スクリーンショット 2023-11-29 105811.png
ppp
記事: 43
登録日時: 2022年9月28日(水) 21:50

Re: イベント内部で実行したコモンイベントから元のイベントのx, y座標を取得する方法

投稿記事by ppp » 2023年11月29日(水) 11:56

回答ありがとうございました。コンソールから確認したところ、this.characterがnullであることが確認できました。
あと、質問内容の再現性についてのご指摘ありがとうございます。今度からは気をつけたいと思います
ppp
記事: 43
登録日時: 2022年9月28日(水) 21:50

Re: イベント内部で実行したコモンイベントから元のイベントのx, y座標を取得する方法

投稿記事by ppp » 2023年11月29日(水) 15:49

ループ内処理で、ウェイトがコモンイベントの中にあったものを、ループ直下にすることで解決しました。お騒がせしてすみません(重要な質問内容が抜けてました)

“MV:質問” へ戻る