RPGツクール2000/システム・自作メニュー【サイトトップへ戻る】
■主人公が次のマスへ移動中かどうかを調べる
(更新:2022/04/23)


主人公が次のマスへ移動中かどうかを調べる処理を設定します。


ショートカット
■システムの基本
■イベントの基本設定
■自作メニューでの活用例


  
■システムの基本

主人公が次のマスへ移動中であるかどうかは、
乗り物との画面X・画面Yの距離を測って調べます。

RPGツクール2000の1マスは「16ピクセル」であるため、
移動していないキャラ同士のピクセル距離は必ず「16の倍数」になります。

そのため「(主人公の画面位置−乗り物の画面位置)剰余16」を計算した場合、
「0=停止中」「0以外=移動中」と判断する事ができます。



イベント設定は、主人公と小型船との距離で移動しているかどうかを調べますが、
小型船は必ず停止している必要があります。

そのため、小型船に乗っている時には大型船で距離を測るようにします。



主人公と乗り物が別々のマップにあっても、
X座標や画面Xは現在のマップに乗り物が置いてある状態と同じようになるため、
問題無く処理する事ができます。

また作品内に乗り物を設置していない場合でも…
マップID=0(存在しないマップ)
  X座標=0
  Y座標=0

の位置に仮置きされるため、問題無く処理する事ができます。


▲トップへ戻る▲


  
■イベントの基本設定

基本設定は以下のようになります。

■コモンイベント「移動中チェック」

イベント開始条件:定期的に並列処理する

◆変数の操作:[0001:画面X]代入,主人公の画面X
◆変数の操作:[0002:画面Y]代入,主人公の画面Y
◆条件分岐:小型船に乗っている(オプション:ON)
 ◆変数の操作:[0001:画面X]減算,大型船の画面X
 ◆変数の操作:[0002:画面Y]減算,大型船の画面Y
 ◆
:それ以外の場合
 ◆変数の操作:[0001:画面X]減算,小型船の画面X
 ◆変数の操作:[0002:画面Y]減算,小型船の画面Y
 ◆
:分岐終了
◆変数の操作:[0001〜0002]剰余,16
◆条件分岐:変数[0001:画面X]が0
 ◆条件分岐:変数[0002:画面Y]が0
  ◆スイッチの操作:[0001:移動中]をOFFにする
  ◆イベント処理の中断
  ◆
 :分岐終了
 ◆
:分岐終了
◆スイッチの操作:[0001:移動中]をONにする

この場合、マスとマスの間を移動中の場合はスイッチ[0001:移動中]がONになり、
マスの中央にいる場合はOFFになります。

実際にマップイベントに…
イベント出現条件:スイッチ[0001:移動中]がON
グラフィック:何らかの画像
を設定して、テストプレーを実行し、主人公を移動すると、
マスとマスの間を移動している時だけマップイベントの画像が表示されます。


▲トップへ戻る▲


  
■自作メニューでの活用例

移動中を判断する処理は、主に自作メニューを表示する時に使います。

もしも主人公が次のマスへ移動している途中である場合は、
移動し終えるまでは自作メニューの表示処理を一時停止します。

以下は基本的な設定例です。

■コモンイベント「自作メニュー起動」

イベント開始条件:定期的に並列処理する
出現条件スイッチ:[0001:自作メニューShift]

◆キー入力の処理:[0001:キー入力](Shift/オプション:ON)
◆現在の場所を記憶:[0002],[0003],[0004]<現在地を保存(場所移動チェック用)
◆繰り返し処理<移動中の場合は移動が終わるまでこの中でループし続ける
 ◆変数の操作:[0005:起動時:画面X]代入,主人公の画面X
 ◆変数の操作:[0006:起動時:画面Y]代入,主人公の画面Y
 ◆条件分岐:小型船に乗っている(オプション:ON)
  ◆変数の操作:[0005:起動時:画面X]減算,大型船の画面X
  ◆変数の操作:[0006:起動時:画面Y]減算,大型船の画面Y
  ◆
 :それ以外の場合
  ◆変数の操作:[0005:起動時:画面X]減算,小型船の画面X
  ◆変数の操作:[0006:起動時:画面Y]減算,小型船の画面Y
  ◆
 :分岐終了
 ◆変数の操作:[0005〜0006]剰余,16
 ◆条件分岐:変数[0005:起動時:画面X]が0
  ◆条件分岐:変数[0006:起動時:画面Y]が0
   ◆繰り返し処理の中断
   ◆
  :分岐終了
  ◆
 :分岐終了
 ◆ウェイト:0.0秒
 ◆
:以上繰り返し
◆スイッチの操作:[0002:自作メニュー実行]をONにする
◆ウェイト:0.0秒
◆スイッチの操作:[0002:自作メニュー実行]をOFFにする

■コモンイベント「自作メニュー実行」

イベント開始条件:自動的に始まる
出現条件スイッチ:[0002:自作メニュー実行]

◆スイッチの操作:[0002:自作メニュー実行]をOFFにする
◆変数の操作:[0002:マップID]減算,主人公のマップID
◆条件分岐:変数[0002:マップID]が0以外<場所移動が実行されたので処理を中断
 ◆イベント処理の中断
 ◆
:分岐終了
◆変数の操作:[0003:X座標]減算,主人公のX座標
◆条件分岐:変数[0003:X座標]が0以外
 ◆イベント処理の中断
 ◆
:分岐終了
◆変数の操作:[0004:Y座標]減算,主人公のY座標
◆条件分岐:変数[0004:Y座標]が0以外
 ◆イベント処理の中断
 ◆
:分岐終了
◆スイッチの操作:[0001:自作メニューShift]をOFFにする
〜自作メニューの処理〜
◆スイッチの操作:[0001:自作メニューShift]をONにする



▼2つのコモンイベントが設定されている理由

主人公が次のマスへ移動している途中でShiftキーを押して自作メニューを表示した場合、
次のマスへ移動し終えてから自作メニューが表示されますが、
次のマスに「主人公から触れたとき」のマップイベントがあった場合は、
もしも定期的に並列処理するの設定だけでは、
マップイベントの処理と自作メニューの処理が同時に実行してしまい、
マップイベントの処理を邪魔してしまう可能性があります。

しかし自動的に始まるを実行して自作メニューを表示させた場合は、
自動的に始まる主人公から触れたときが同時に実行できない仕様であるため、
マップイベントの主人公から触れたときが実行している時には、
自動的に始まるは実行しなくなり、マップイベントの処理を邪魔しないで済みます。

但し主人公から触れたときのマップイベントに場所移動だけを設定した場合は、
場所移動を実行して場所移動が終了すると、移動先で自作メニューが表示されてしまいます。

この問題を防ぐため、
自動的に始まるが実行する前後のマップID、X座標、Y座標を調べて、
どれか1つでも変化があった場合は「場所移動を実行した」と判断して、
自作メニューが表示されないようにしています。

なお、自作メニューを定期的に並列処理するではなく自動的に始まるで処理する事で、
主人公を一時停止するような処理が要らなくなります。
また他のイベント(自動的に始まるイベントから触れたときなど)が、
自作メニューを表示している時に誤って実行しないようにする事もできます。


▲トップへ戻る▲



◎関連ページ

●自作メニューの基礎
●パーティー編成(マップ移動型)
●パーティー編成(フィールド表示型)
●顔パーティー編成
●自作アイテムメニューの基礎

YADOTトップ  このサイトは何?  気紛れな空間へ戻る  メール