RPGツクール2000/自作戦闘
ピクチャー放物線移動処理
■敵への当たり判定
(更新:2011/09/24)


ボールが敵キャラ(マップイベント)に当たるようにします。


このページは続きとなっているページです
制作の始めは基礎ページから行ってください。
【ピクチャー放物線移動処理のページを開く】



☆スイッチ・変数の一覧
使用するスイッチ・変数は↓をクリックして確認してください。
【スイッチ・変数の一覧表を別ウィンドウで表示する】

※タブ表示にしたい場合は↑の上で、
 右クリック→新しいタブで開くなどとしてください。


※スイッチ・変数の一覧はピクチャー放物線移動処理の各ページで共有しています。
 既にピクチャー放物線移動処理のスイッチ・変数の一覧画面を開いている場合は、
 新たに開く必要はありません。




☆当たり判定を判断する方法
ピクチャーのボールが敵キャラに当たっているかどうかを判断させる方法は、
以下の3つがあります。

■マス座標で当たり判定
敵キャラのX座標、Y座標を変数に取得して、
敵キャラに弾丸が当たっているかどうかを判断します。
他の方法に比べて使い勝手が悪いので、今回の制作では使用しません。

■イベントIDで当たり判定
イベントコマンド:指定位置のイベントID取得を使用して、
ボールがいるマスのイベントIDを取得し、
取得したイベントIDが敵のイベントIDである時には、
敵キャラに当たったと判断します。
アクションRPGの当たり判定では、よく使われている設定方法です。
なお、ピクチャーの当たり判定では、
移動中の敵キャラへの命中率が下がると言う欠点があります。※詳しくは後ほど説明。

■画面位置で当たり判定
敵キャラの画面X、画面Yボールの位置を比較して、
敵キャラにボールが重なっている時に「当たった」と判断します。
移動中の敵キャラでも正確に当たり判定が行えますが、
敵1体ごとに当たり判定の処理を設定する必要があり、
たくさんの敵キャラがいる場合には、あまりお勧めできません。
なお、敵キャラ(ターゲット)がピクチャーである時には、この設定方法になります。



☆イベントIDでの当たり判定に関して
イベントIDで当たり判定は、設定が楽に行える反面、
移動している途中の敵キャラの当たり判定がうまく行えない事があります。

左図のように、敵キャラが止まっている時には、
主人公から投げられたボール(黄色の矢印)は当たります。
しかし敵キャラが主人公がいる方向の垂直方向に移動しますと、
当たり判定のマスは次のマスへ移動しますので、
まだ前のマスに体が残っていても(黄色の矢印のように投げても)、
敵キャラには当たらず、水色の矢印のように投げますと、
敵が赤いマスへ移動し終わってなくても、敵キャラに当たります。

イベントIDで当たり判定で移動する敵キャラの当たり判定を設定しますと、
画面上では当たっているのに「当たっていない」と処理され、
プレイヤーには分かりにくいシステムになります。
逆に移動しない敵キャラやマップ上の障害物(岩やタルなど)への攻撃の場合は、
イベントIDで当たり判定の方が良いでしょう。
そのため、
敵(攻撃対象)が移動しない→イベントIDで当たり判定
敵(攻撃対象)が移動する →画面位置で当たり判定
と言ったように使い分けると良いでしょう。



☆マップイベントの設定
マップ上にマップイベント「マップ右下」と、
敵キャラとなるマップイベントを設定します。
※「イベントIDで当たり判定」「画面位置で当たり判定」、
 どちらも「マップ右下」や「
敵キャラ」の設定は同じです。


マップの右下のマスに以下のイベントを設定してください。
■マップイベント「マップ右下」
イベント開始条件:定期的に並列処理する
◆変数の操作:[0041:敵イベントID開始値]代入,2<最小の敵イベントIDを設定
◆変数の操作:[0042:敵イベントID終了値]代入,3<最大の敵イベントIDを設定
◆変数の操作:[0201〜0300]代入,0<全ての敵キャラのHPを初期化する
◆変数の操作:[0014:1ページ目]代入,1
◆イベントの一時消去



敵キャラのイベントを設定します。
今回の設定例では、イベントID2番3番のマップイベントを敵キャラとします。

敵キャラにはそれぞれ、
変数[0202:敵02HP]
変数[0203:敵03HP]

と言ったHPを記憶する変数を用意します。
なお、変数の番号は「イベントID+200=HPを記憶した変数番号」で算出します。

敵キャラのマップイベントは3ページの構成とします。
1ページ目 ボールが当たった時の処理を設定。
コモンイベントから呼び出して実行する。
2ページ目 敵の攻撃処理を設定。
※攻撃処理が無い障害物イベントなどの場合は、
 このページの設定は不要です。
3ページ目 敵を倒した時に表示されるページ。

敵を倒した時には、
イベントコマンド:イベントの位置を設定で邪魔にならないマスへ移動します。
出来るだけ壁などの移動不可のマスへ移動してください。


■マップイベント「敵(ID:02)」※イベントID2番の時
▼1ページ目
イベント出現条件:なし
イベント開始条件:決定キーが押されたとき
グラフィック:敵キャラの絵
◆条件分岐:決定キーでこのイベントを開始した※2ページ目がある場合はこの設定は不要です。
 ◆イベント処理の中断
 ◆
:分岐終了
◆条件分岐:変数[0202:敵02HP]が5以上<既に敵を倒した時
 ◆イベント処理の中断
 ◆
:分岐終了
◆スイッチの操作:[0002:当たり確認]をONにする<ボールを消去させる時に使用
◆変数の操作:[0202:敵02HP]加算,1<敵のダメージ量を増やす
◆条件分岐:変数[0202:敵02HP]が5(オプション:ON)<敵を倒した時
 ◆効果音の演奏:消滅2<敵を倒した時の効果音
 ◆イベントの位置を設定:このイベント, (000,000)<邪魔にならない所へ移動
 ◆
:それ以外の場合<敵を倒していない時
 ◆キャラクターのフラッシュ:このイベント,0.5秒(R31,G00,B00,V31)<赤く光らせる
 ◆効果音の演奏:打撃4<ボールが当たった時の効果音
 ◆
:分岐終了


▼2ページ目※障害物イベントの場合はこのページの設定は不要です。
イベント出現条件:なし
イベント開始条件:自由に設定
グラフィック:敵キャラの絵
イベント実行内容は自由に設定してください。

▼3ページ目
イベント出現条件:変数[0202:敵02HP]が5以上
イベント開始条件:決定キーが押されたとき
グラフィック:透明
イベント実行内容には何も設定しません。


作成したマップイベント「敵(ID:02)」コピー&貼り付けし、
マップイベント「敵(ID:03)」を準備してください。

■マップイベント「敵(ID:03)」※イベントID3番の時
▼1ページ目
イベント出現条件:なし
イベント開始条件:決定キーが押されたとき
グラフィック:敵キャラの絵
◆条件分岐:決定キーでこのイベントを開始した
 ◆イベント処理の中断
 ◆
:分岐終了
◆条件分岐:変数[0203:敵03HP]が5以上
 ◆イベント処理の中断
 ◆
:分岐終了
◆スイッチの操作:[0002:当たり確認]をONにする
◆変数の操作:[0203:敵03HP]加算,1
◆条件分岐:変数[0203:敵03HP]が5(オプション:ON)
 ◆効果音の演奏:消滅2
 ◆イベントの位置を設定:このイベント, (000,000)
 ◆
:それ以外の場合
 ◆キャラクターのフラッシュ:このイベント,0.5秒(R31,G00,B00,V31)
 ◆効果音の演奏:打撃4
 ◆
:分岐終了


▼2ページ目
イベント出現条件:なし
イベント開始条件:自由に設定
グラフィック:敵キャラの絵

イベント実行内容は自由に設定してください。

▼3ページ目
イベント出現条件:変数[0203:敵03HP]が5以上
イベント開始条件:決定キーが押されたとき
グラフィック:透明

イベント実行内容には何も設定しません。



☆イベントIDによる当たり判定
ボール位置のイベントIDを所得して、
ボールに当たっているかどうかを判断します。

イベントIDを取得する処理は、
ボールが地面から8ピクセル以内になった時に実行します。


■コモンイベント「放物線移動:キー処理」
※設定の変更はありません。


■コモンイベント「放物線移動:ボール移動」
イベント開始条件:定期的に並列処理する
◆ラベルの設定:10番
◆ウェイト:0.0秒
◆変数の操作:[0002:現在のマップID]代入,主人公のマップID
◆条件分岐:変数[0003:前のマップID]がV[0002]以外
 ◆スイッチの操作:[0011:移動中:ボール01]をOFFにする
 ◆
:分岐終了
◆注釈:------------------------------------------------------------
:  :ボール1の移動処理
:  : 

◆条件分岐:スイッチ[0011:移動中:ボール01]がON(オプション:ON)
 ◆注釈:----------------------------
 :  :ボールを2ピクセル移動
 :  : 

 ◆条件分岐:変数[0103:ボール01:移動方向]が2
  ◆変数の操作:[0102:ボール01:現在位置Y]加算,2
  ◆
 :分岐終了
 ◆条件分岐:変数[0103:ボール01:移動方向]が4
  ◆変数の操作:[0101:ボール01:現在位置X]減算,2
  ◆
 :分岐終了
 ◆条件分岐:変数[0103:ボール01:移動方向]が6
  ◆変数の操作:[0101:ボール01:現在位置X]加算,2
  ◆
 :分岐終了
 ◆条件分岐:変数[0103:ボール01:移動方向]が8
  ◆変数の操作:[0102:ボール01:現在位置Y]減算,2
  ◆
 :分岐終了
 ◆注釈:----------------------------
 :  :ボールの高さを変更
 :  : 

 ◆変数の操作:[0108:ボール01:現在高さ%]減算,変数[0107]の値
 ◆変数の操作:[0010:ボールの表示位置Y]代入,変数[0108]の値
 ◆変数の操作:[0010:ボールの表示位置Y]乗算,変数[0104]の値
 ◆変数の操作:[0010:ボールの表示位置Y]除算,変数[0106]の値
 ◆変数の操作:[0010:ボールの表示位置Y]加算,変数[0102]の値
 ◆注釈:----------------------------
 :  :ボールの表示
 :  : 

 ◆ピクチャーの移動:1,(V[0101],V[0102]),0.0秒(透明度:60%)
 ◆ピクチャーの移動:11,(V[0101],V[0010]),0.0秒(透明度:0%)
 ◆注釈:----------------------------<追加する
 :  :当たり判定
 :  : 

 ◆変数の操作:[0009:ボールの高さ]代入,変数[0010]の値<ボールの表示位置Yを代入
 ◆変数の操作:[0009:ボールの高さ]減算,変数[0102]の値<影の表示位置Yを減算
 ◆条件分岐:変数[0009:ボールの高さ]が-8以上<影からのボールの高さが8ピクセル以内の時
  ◆変数の操作:[0011:ボールのX]代入,変数[0101]の値<ボールX位置を代入
  ◆変数の操作:[0012:ボールのY]代入,変数[0102]の値<ボールY位置を代入
  ◆変数の操作:[0011〜0012]除算,16<除算16でマス単位にする
  ◆指定位置のイベントID取得:(V[0011],V[0012]),[0013:ID取得]
  ◆条件分岐:変数[0013:ID取得]がV[0041]以上<敵イベントIDの時
   ◆スイッチの操作:[0002:当たり確認]をOFFにする
   ◆イベントの呼び出し:V[13][V[14]]<敵イベントの1ページ目を呼び出す
   ◆条件分岐:スイッチ[0002:当たり確認]がON<敵がダメージを受けた時
    ◆指定ラベルへ飛ぶ:11番<ボールを消す処理へ移動
    ◆
   :分岐終了
   ◆
  :分岐終了
  ◆
 :分岐終了

 ◆注釈:----------------------------
 ◆変数の操作:[0107:ボール01:高さ%±]減算,1
 ◆条件分岐:変数[0108:ボール01:現在高さ%]が1以上
  ◆注釈:----------------------------
  :  :ボールが着弾(ボールを消す)
  :  : 

  ◆効果音の演奏:打撃6
  ◆ラベルの設定:11番<追加する
  ◆スイッチの操作:[0011:移動中:ボール01]をOFFにする
  ◆
 :分岐終了
 ◆
:それ以外の場合
 ◆ピクチャーの移動:1,(160,120),0.0秒(透明度:100%)
 ◆ピクチャーの移動:11,(160,120),0.0秒(透明度:100%)
 ◆
:分岐終了
◆指定ラベルへ飛ぶ:10番




☆画面位置による当たり判定
ボールと敵キャラとの画面距離(ピクセル)を調べて、
ボールとの距離が7ピクセル以内のである時に当たったとします。

なお、距離を調べる処理は、
ボールが地面から8ピクセル以内になった時に実行します。


■コモンイベント「放物線移動:キー処理」
※設定の変更はありません。


■コモンイベント「放物線移動:ボール移動」
イベント開始条件:定期的に並列処理する
◆ラベルの設定:10番
◆ウェイト:0.0秒
◆変数の操作:[0002:現在のマップID]代入,主人公のマップID
◆条件分岐:変数[0003:前のマップID]がV[0002]以外
 ◆スイッチの操作:[0011:移動中:ボール01]をOFFにする
 ◆
:分岐終了
◆注釈:------------------------------------------------------------
:  :ボール1の移動処理
:  : 

◆条件分岐:スイッチ[0011:移動中:ボール01]がON(オプション:ON)
 ◆注釈:----------------------------
 :  :ボールを2ピクセル移動
 :  : 

 ◆条件分岐:変数[0103:ボール01:移動方向]が2
  ◆変数の操作:[0102:ボール01:現在位置Y]加算,2
  ◆
 :分岐終了
 ◆条件分岐:変数[0103:ボール01:移動方向]が4
  ◆変数の操作:[0101:ボール01:現在位置X]減算,2
  ◆
 :分岐終了
 ◆条件分岐:変数[0103:ボール01:移動方向]が6
  ◆変数の操作:[0101:ボール01:現在位置X]加算,2
  ◆
 :分岐終了
 ◆条件分岐:変数[0103:ボール01:移動方向]が8
  ◆変数の操作:[0102:ボール01:現在位置Y]減算,2
  ◆
 :分岐終了
 ◆注釈:----------------------------
 :  :ボールの高さを変更
 :  : 

 ◆変数の操作:[0108:ボール01:現在高さ%]減算,変数[0107]の値
 ◆変数の操作:[0010:ボールの表示位置Y]代入,変数[0108]の値
 ◆変数の操作:[0010:ボールの表示位置Y]乗算,変数[0104]の値
 ◆変数の操作:[0010:ボールの表示位置Y]除算,変数[0106]の値
 ◆変数の操作:[0010:ボールの表示位置Y]加算,変数[0102]の値
 ◆注釈:----------------------------<追加する
 :  :当たり判定
 :  : 

 ◆変数の操作:[0009:ボールの高さ]代入,変数[0010]の値<ボールの表示位置Yを代入
 ◆変数の操作:[0009:ボールの高さ]減算,変数[0102]の値<影の表示位置Yを減算
 ◆条件分岐:変数[0009:ボールの高さ]が-8以上<影からのボールの高さが8ピクセル以内の時
  ◆条件分岐:変数[0041:敵イベントID開始値]が2以下<マップ上にイベントID2番がいる時
   ◆条件分岐:変数[0042:敵イベントID終了値]が2以上
    ◆変数の操作:[0011:ボールのX]代入,変数[0101]の値<ボールX位置を代入
    ◆変数の操作:[0012:ボールのY]代入,変数[0102]の値<ボールY位置を代入
    ◆変数の操作:[0011:ボールのX]減算,敵(ID:02)の画面X<減算し距離を出す
    ◆変数の操作:[0012:ボールのY]減算,敵(ID:02)の画面Y<減算し距離を出す
    ◆変数の操作:[0012:ボールのY]加算,8<敵キャラの足元から中心に修正する
    ◆変数の操作:[0011〜0012]除算,8<除算して7ピクセル以内に敵がいるかどうかを調べる
    ◆条件分岐:変数[0011:ボールのX]が0<X位置は7ピクセル以内の時
     ◆条件分岐:変数[0012:ボールのY]が0<Y位置は7ピクセル以内の時
      ◆スイッチの操作:[0002:当たり確認]をOFFにする
      ◆イベントの呼び出し:敵(ID:02)[1]<イベントID2番の1ページ目を呼び出す
      ◆条件分岐:スイッチ[0002:当たり確認]がON<敵がダメージを受けた時
       ◆指定ラベルへ飛ぶ:11番<ボールを消す処理へ移動
       ◆
      :分岐終了
      ◆
     :分岐終了
     ◆
    :分岐終了
    ◆
   :分岐終了
   ◆
  :分岐終了
  ◆条件分岐:変数[0041:敵イベントID開始値]が3以下<上記設定をコピーして修正
   ◆条件分岐:変数[0042:敵イベントID終了値]が3以上
    ◆変数の操作:[0011:ボールのX]代入,変数[0101]の値
    ◆変数の操作:[0012:ボールのY]代入,変数[0102]の値
    ◆変数の操作:[0011:ボールのX]減算,敵(ID:03)の画面X
    ◆変数の操作:[0012:ボールのY]減算,敵(ID:03)の画面Y
    ◆変数の操作:[0012:ボールのY]加算,8
    ◆変数の操作:[0011〜0012]除算,8
    ◆条件分岐:変数[0011:ボールのX]が0
     ◆条件分岐:変数[0012:ボールのY]が0
      ◆スイッチの操作:[0002:当たり確認]をOFFにする
      ◆イベントの呼び出し:敵(ID:03)[1]
      ◆条件分岐:スイッチ[0002:当たり確認]がON
       ◆指定ラベルへ飛ぶ:11番
       ◆
      :分岐終了
      ◆
     :分岐終了
     ◆
    :分岐終了
    ◆
   :分岐終了
   ◆
  :分岐終了

  ◆
 :分岐終了

 ◆注釈:----------------------------
 :  :ボールの表示
 :  : 

 ◆ピクチャーの移動:1,(V[0101],V[0102]),0.0秒(透明度:60%)
 ◆ピクチャーの移動:11,(V[0101],V[0010]),0.0秒(透明度:0%)
 ◆注釈:----------------------------
 ◆変数の操作:[0107:ボール01:高さ%±]減算,1
 ◆条件分岐:変数[0108:ボール01:現在高さ%]が1以上
  ◆注釈:----------------------------
  :  :ボールが着弾(ボールを消す)
  :  : 

  ◆効果音の演奏:打撃6
  ◆ラベルの設定:11番<追加する
  ◆スイッチの操作:[0011:移動中:ボール01]をOFFにする
  ◆
 :分岐終了
 ◆
:それ以外の場合
 ◆ピクチャーの移動:1,(160,120),0.0秒(透明度:100%)
 ◆ピクチャーの移動:11,(160,120),0.0秒(透明度:100%)
 ◆
:分岐終了
◆指定ラベルへ飛ぶ:10番




☆補足
このページの設定は、
固定画面(横20×縦15+ループなし)のみで使用できる設定です。
固定画面では無いマップに対応させるには、
画面スクロール対応の設定も必要になります。



放物線移動処理のページ
基礎ページ まずはこのページの設定を行ってください。
飛距離を変える 装備状態や攻撃力などによって飛距離を変えます。
敵への当たり判定 敵(マップイベント)にボールが当たるようにします。
高低差(壁)の設定 高低差の設定を追加します。
画面スクロール対応 画面スクロールに対応できるように改良します。
 

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