【解決済み】場所移動後にコモンイベントでセルフスイッチをONにしようとすると

沼江蛙

ユーザー
naze.png
VXAceでよく分からないことがあったので書かせていただきます。

イベント内容
・場所移動(別のマップに移動)
・セルフスイッチAをON
これだとちゃんとONになるのですが、

・場所移動(別のマップに移動)
・コモンイベント(内容はセルフスイッチAをONのみ)
これだと何故かONになりません。なんで……?

イベント内容
・コモンイベント(内容は場所移動の後セルフスイッチAをON)
場所移動もコモンイベント内に含めたら何故かちゃんとONになりました。

何故でしょうか……。
理由が分かる方がいたら教えてください。
 
最後に編集:

しぐれん

ユーザー
今いるマップをA、移動後のマップをBとした場合に、セルフスイッチをONにするのはABどちらのマップでしょうか?
マップ移動を挟んだことによって、スイッチ操作が無効化されていると思います。
 

沼江蛙

ユーザー
セルフスイッチを操作するのは移動前Aのマップのイベントです。
何故か場所移動後にコモンイベントでセルフスイッチをONにしようとした場合のみできませんでした。

移動後のマップBの同じIDのイベントのセルフスイッチがONになってるのかもと思って調べたのですが、
マップBのイベントには変化がないみたいでした。

場所移動するとセルフスイッチの操作が無効化されるのでしょうか…
でもコモンイベントを使わず普通にONにした場合はちゃんと反映されるようです。
 

しぐれん

ユーザー
この場合、セルフスイッチではなく通常のスイッチを使うべきではないかと思います。
セルフスイッチを使わなければいけない事情が何かあるのでしょうか?
 

沼江蛙

ユーザー
扉のイベントでセルフスイッチを使っていた時にたまたま気付いて、
私の知らない場所移動やコモンイベントの仕様があるのかと思って、気になって質問しました。
理由が不明なら別に大丈夫です。お忙しいところすみません…
 

しぐれん

ユーザー
確か一部のイベントにはマップ移動すると変な場所が書き換わらないように、処理を止める部分があった記憶。
MVの時の物ですが、VXaceと大きな違いはなかったと思います。
 

It's

ユーザー
暇人なので、調べてみました(笑)

イベントの実行内容を扱うのは、Game_Interpreterクラスです。

コモンイベントの呼び出しメソッドを見てみると、
子インタプリタとして、新しくGame_Interpreterを作成しています。
これがコモンイベントです。
続けて、内容のsetupがされるのですが、
この時に、場所移動などで、マップIDが、イベント起動時と違う場合、
イベントIDは、0(イベントID無し、つまり、初期化)にされてしまいます。
場所移動する前であれば、0にされません。

次に、セルフスイッチの操作メソッドを見てみると、
$game_self_switchesのkeyとして渡されるイベントIDは、
1以上であれば、セルフスイッチが変更されます。
場所移動等でマップIDが変わっているかどうかは、関係ありません。
なので、質問の例で言えば、

イベント内容
・場所移動(別のマップに移動)
・セルフスイッチAをON
コモンイベントを呼び出していないので、イベントIDが0にならず、
ちゃんとONになる。

イベント内容
・場所移動(別のマップに移動)
・コモンイベント(内容はセルフスイッチAをONのみ)
場所移動後にコモンイベント作成をしているため、イベントIDが0になる。
そのため、セルフスイッチの操作が行われず、ONにならない。

イベント内容
・コモンイベント(内容は場所移動の後セルフスイッチAをON)
コモンイベント作成時には、マップIDが変わっていないため、
イベントIDが0にされないので、セルフスイッチがONになる。

という事になります。

マップイベントと、コモンイベントが内部的(スクリプト的)には、
別物として扱われているために起こる現象のようですね。
しぐれんさんの言う通り、コモンイベントが色々なタイミングで呼べるという仕様上、
意図したイベントと別のイベントを誤って操作してしまわないように
なっているのだと思います。
 

沼江蛙

ユーザー
マップイベントと、コモンイベントが内部的(スクリプト的)には、
別物として扱われているために起こる現象のようですね。
そうなんですね……知りませんでした。
若干自分のツクールだけバグってるのかと思ってたので、理由が分かって大分スッキリしました。
しぐれんさん、It'sさん ありがとうございました。
 
トップ