RPGツクール2000/自作戦闘【サイトトップへ戻る】
ピクチャー弾丸を飛ばす/敵も弾丸発射
■弾丸の1回の移動量を決める処理
(更新:2020/07/05)




上図の矢印1つが1回(60分の1秒)の移動量を示しています。
この矢印で示した移動量を決定する処理方法をこのページで説明します。

ショートカット
■イベントの設定
■処理内容の解説
■補足


  
■イベントの設定

弾丸の1回の移動量(X±、Y±)を決める処理は以下のとおりです。

◆変数の操作:[0003:X±]代入,主人公のX座標
◆変数の操作:[0004:Y±]代入,主人公のY座標
◆変数の操作:[0003:X±]減算,敵キャラ01のX座標
◆変数の操作:[0004:Y±]減算,敵キャラ01のY座標
◆変数の操作:[0013〜0014]代入,1
◆条件分岐:変数[0003:X±]が-1以下
 ◆変数の操作:[0003:X±]乗算,-1
 ◆変数の操作:[0013:敵弾:Xの±状態記憶]代入,-1
 ◆
:分岐終了
◆条件分岐:変数[0004:Y±]が-1以下
 ◆変数の操作:[0004:Y±]乗算,-1
 ◆変数の操作:[0014:敵弾:Yの±状態記憶]代入,-1
 ◆
:分岐終了
◆注釈:------------------------------
:  :▼移動方向を設定
:  : 

◆条件分岐:変数[0003:X±]がV[0004]以上(オプション:ON)
 ◆変数の操作:[0004:Y±]乗算,8
 ◆変数の操作:[0004:Y±]除算,変数[0003]の値
 ◆変数の操作:[0004:Y±]加算,1
 ◆変数の操作:[0004:Y±]除算,2
 ◆変数の操作:[0003:X±]代入,4
 ◆
:それ以外の場合
 ◆変数の操作:[0003:X±]乗算,8
 ◆変数の操作:[0003:X±]除算,変数[0004]の値
 ◆変数の操作:[0003:X±]加算,1
 ◆変数の操作:[0003:X±]除算,2
 ◆変数の操作:[0004:Y±]代入,4
 ◆
:分岐終了
◆変数の操作:[0003:X±]乗算,変数[0013]の値
◆変数の操作:[0004:Y±]乗算,変数[0014]の値

処理としては、敵と主人公との距離を算出して、
その情報を基に弾丸の移動方向を決定します。


▲トップへ戻る▲


  
■処理内容の解説

最初に…
◆変数の操作:[0003:X±]代入,主人公のX座標
◆変数の操作:[0004:Y±]代入,主人公のY座標
◆変数の操作:[0003:X±]減算,敵キャラ01のX座標
◆変数の操作:[0004:Y±]減算,敵キャラ01のY座標
の処理で、X座標、Y座標の両者の距離を算出します。





このような場合は…
変数[0003:X±]=5
変数[0004:Y±]=2
になります。

そして…
◆変数の操作:[0013〜0014]代入,1
◆条件分岐:変数[0003:X±]が-1以下
 ◆変数の操作:[0003:X±]乗算,-1
 ◆変数の操作:[0013:敵弾:Xの±状態記憶]代入,-1
 ◆
:分岐終了
◆条件分岐:変数[0004:Y±]が-1以下
 ◆変数の操作:[0004:Y±]乗算,-1
 ◆変数の操作:[0014:敵弾:Yの±状態記憶]代入,-1
 ◆
:分岐終了
の処理によって、マイナス値である変数の値を一旦プラス値に直します。

変数[0013:敵弾:Xの±状態記憶]変数[0014:敵弾:Yの±状態記憶]は、
マイナス値からプラス値にした値を後で、マイナス値に戻す時に使います。



次にある…
◆条件分岐:変数[0003:X±]がV[0004]以上
 ◆変数の操作:[0004:Y±]乗算,8
 ◆変数の操作:[0004:Y±]除算,変数[0003]の値
 ◆変数の操作:[0004:Y±]加算,1
 ◆変数の操作:[0004:Y±]除算,2
 ◆変数の操作:[0003:X±]代入,4
 ◆
:それ以外の場合
 ◆変数の操作:[0003:X±]乗算,8
 ◆変数の操作:[0003:X±]除算,変数[0004]の値
 ◆変数の操作:[0003:X±]加算,1
 ◆変数の操作:[0003:X±]除算,2
 ◆変数の操作:[0004:Y±]代入,4
 ◆
:分岐終了
の処理では、X座標とY座標のどちらが距離が長いのかを調べ…
X距離とY距離が同じ→◆条件分岐:変数[0003:X±]がV[0004]以上の処理
X距離がY距離より大きい→◆条件分岐:変数[0003:X±]がV[0004]以上の処理
X距離がY距離より小さい→:それ以外の場合の処理
と言った条件で処理します。



弾丸の1回の移動量は、距離が長い方は「4ピクセル」、
距離が短い方は、長い方の値と比較して「0〜4」の値を設定します。


上図のような場合は…
Xの距離=5マス
Yの距離=2マス
と言う事でXの方が距離が長い状態になり…
◆変数の操作:[0003:X±]代入,4
になります。



変数[0004:Y±]の値は…
◆変数の操作:[0004:Y±]乗算,8
◆変数の操作:[0004:Y±]除算,変数[0003]の値
◆変数の操作:[0004:Y±]加算,1
◆変数の操作:[0004:Y±]除算,2
の処理によって算出します。



処理としては、長い距離を100%とした場合、
短い距離は長い距離の何パーセントあるのかを調べて、
そのパーセントに合わせて短い距離の1回の移動量を決定します。



この図の場合は、
長い距離(Xの距離)5マス(100%)
短い距離(Yの距離)2マス(40%)となります。

100%の時の1回の移動ピクセル数が「4ピクセル」なので、
その40%では「1.6ピクセル」になります。

今回のイベント設定では小数点以下が四捨五入になるように設定していますので、
最終的に変数[0004:Y±]の値は「」になります。



なお「乗算,8」のは、最大移動ピクセル数の2倍となっています。

弾丸の移動速度を遅くしたいな〜」と言った場合は、
変数[0003:X±]代入,3」と設定した上で、乗算の値は「乗算,6」にしてください。



最後に…
◆変数の操作:[0003:X±]乗算,変数[0013]の値
◆変数の操作:[0004:Y±]乗算,変数[0014]の値
の処理によって、一旦プラス値にした値をマイナス値に戻します。



これで弾丸の1回の移動量が決定しました。

▼1回の移動量が「X+4」「Y+2」になった場合の弾丸の移動状態



▲トップへ戻る▲


  
■補足

移動量は「0〜4」の間で設定されます。

5マス程度の距離なら問題ありませんが、7マス先の主人公に撃つ場合は、
主人公の位置によっては弾丸が当たらない可能性もあります。



これを解決させるには、自力での改善が必要です。


▲トップへ戻る▲

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