接触方向判定(RPGツクール2000)

シンボルエンカウントで接触した時の向きを判定する方法

シンボルエンカウント

マップ上のキャラクタ(イベント)と接触する事で戦闘に移行したりするシステム。 歩き回るキャラ(イベント)の起動設定を「イベントから触れたとき」にして 「バトルの開始」等の処理を書くだけでそれっぽくなります。

目的

基本は上の方法でOKなのですが、接触した瞬間にキャライベント(以下 敵キャラ)が 自動的に主人公の方向を向いてしまうので「背後から接触」等の処理が出来ません。そ こでちょっと手を加えて接触時の向きも取得できるようにしようというのがこの項の目 的です。

敵キャラの設定

ポイントは「アニメーションタイプ:向き固定」と「移動タイプ:移動ルート指定」です。 勝手に振り向いてしまうのを防ぐ為に向き固定にし、「移動ルート指定」で敵キャラの向き を指定して振り向かせています。

イベント内容(敵キャラ)

◆変数の操作:[0004:敵X]代入, このイベントのX座標
◆変数の操作:[0005:敵Y]代入, このイベントのY座標
◆変数の操作:[0006:敵向き]代入, このイベントの向き
◆イベントの呼び出し:コモンイベント[1:向き判定]
◆条件分岐:スイッチ[0001:敵の後ろ]がON
 ◆文章:敵の背後を取った
 ◆
:分岐終了
◆条件分岐:スイッチ[0002:お見合い]がON
 ◆文章:お見合い
 ◆
:分岐終了
◆条件分岐:スイッチ[0003:敵の側面]がON
 ◆文章:敵の側面を取った
 ◆
:分岐終了
◆条件分岐:スイッチ[0004:敵が後ろ]がON
 ◆文章:敵に後ろを取られた
 ◆
:分岐終了
◆条件分岐:スイッチ[0005:敵が横]がON
 ◆文章:敵に側面を取られた
 ◆
:分岐終了

敵キャラのイベント内でキャラの座標を変数に入れ、実際に判定をするコモンイベントを呼び出しています。 コモンイベントで向きの判定結果がスイッチ等に入るのでその結果を元に戦闘等の処理を指定します (コモンイベントで処理してもOK)。見やすいように条件分岐を並べていますが実際に使うときは 「それ以外の場合」を使って入れ子にしていった方が少し処理が少なくて済みます。

コモンイベント(向き判定)

◆注釈:----------
:  : 向き判定
:  :----------
◆注釈:☆スイッチ初期化
◆スイッチの操作:[0001~0005]をOFFにする
◆注釈:☆主人公:正面判定
◆変数の操作:[0001:主人公X]代入, 主人公のX座標
◆変数の操作:[0002:主人公Y]代入, 主人公のY座標
◆変数の操作:[0003:主人公向き]代入, 主人公の向き
◆条件分岐:変数[0003:主人公向き]が2
 ◆変数の操作:[0002:主人公Y]加算, 1
 ◆
:それ以外の場合
 ◆条件分岐:変数[0003:主人公向き]が8
  ◆変数の操作:[0002:主人公Y]減算, 1
  ◆
 :それ以外の場合
  ◆変数の操作:[0001:主人公X]加算, 変数[0003:主人公向き]の値
  ◆変数の操作:[0001:主人公X]減算, 5
  ◆
 :分岐終了
 ◆
:分岐終了
◆注釈:------------------------
:  : 敵が主人公の正面にいるかどうか
:  :------------------------
◆条件分岐:変数[0001:主人公X]がV[0004:敵X]
 ◆条件分岐:変数[0001:主人公Y]がV[0005:敵Y]
  ◆条件分岐:変数[0003:主人公向き]がV[0006:敵向き]
   ◆注釈:☆敵が正面かつ向きが同じなら敵の背後
   ◆スイッチの操作:[0001:敵の背後]をONにする
   ◆指定ラベルへ飛ぶ:1番
   ◆
  :それ以外の場合
   ◆変数の操作:[0003:主人公向き]加算, 変数[0006]の値
   ◆条件分岐:変数[0003:主人公向き]が10
    ◆注釈:☆敵が正面かつ向きが逆ならお見合い状態
    ◆スイッチの操作:[0002:お見合い]をONにする
    ◆指定ラベルへ飛ぶ:1番
    ◆
   :それ以外の場合
    ◆注釈:☆敵が正面かつ敵の側面
    ◆スイッチの操作:[0002:敵の側面]をONにする
    ◆指定ラベルへ飛ぶ:1番
    ◆
   :分岐終了
   ◆
  :分岐終了
  ◆
 :分岐終了
 ◆
:分岐終了
◆注釈:------------------------
:  : 敵が主人公の正面にいない
:  : =敵の正面
:  :------------------------
◆条件分岐:変数[0003:主人公向き]がV[0006:敵向き]
 ◆スイッチの操作:[0004:敵が後ろ]をONにする
 ◆
:それ以外の場合
 ◆スイッチの操作:[0005:敵が横]をONにする
 ◆
:分岐終了
◆ラベルの設定:1番

主人公の正面判定

主人公の座標を変数にとり、主人公の向きから一歩前の座標を計算します。 その座標が敵キャライベントの座標と一致すれば敵が主人公の正面に居るということになります。
このときお互いの向きが同じなら敵が主人公の正面で背中を向けている状態ということになります。 お互いが向き合っている状態というのはお互いの向きが[4,6]もしくは[2,8]の場合なので向きの合計が10 かどうかで判断しています。

それ以外の場合

主人公の正面にいない=敵の正面にいるということになります。※1
お互いに向き合っている場合は既に処理されているはずなので背後を取られているか、横をとられているか の判定だけですみます。

補足

共通の後処理用にラベル1をつけていますが今回は何もしていないので「ラベル1に飛ぶ」の部分を 「イベント処理の中断」にしてもいいです。


※1
キャラクタが正面以外に移動する場合は敵キャラの正面にいるかどうかについても判定する必要があります。 今回は使っていませんが「コモンイベント002:接触判定2」にその場合の処理を記述しています

向き判定デモ



向き判定デモ ver 0.0.2[direction.zip] 05/03/2009更新