RPGツクール2000/自作戦闘【サイトトップへ戻る】
ピクチャー放物線移動処理
■高低差(壁)の設定
(更新:2020/08/08)
高低差がある地形が設定できるようにします。
■スイッチ・変数の一覧
使用するスイッチ・変数は↓をクリックして確認してください。
【スイッチ・変数の一覧表を別ウィンドウで表示する】
スイッチ・変数の一覧はピクチャー放物線移動処理の各ページで共有しています。
既にピクチャー放物線移動処理のスイッチ・変数の一覧画面を開いている場合は、
新たに開く必要はありません。
▲トップへ戻る▲
■マップの準備
壁や高低差の有無の判断は、地形ID(地形番号)を使います。
基本的に地形IDの番号が大きいほど、高い位置の地形になります。
高さの基準は影の位置なので、ボールが表示されている位置に壁があっても、
影の位置に壁が無い場合は「壁に当たった」とはなりません。
まずチップセット画像を準備してください。
チップセット画像はRTPの物でも問題ありませんが、
同じ画像でいくつかの地形IDを準備したい時には、
RTPを加工するなどして、高さごとの地形(下層チップ)を用意してください。
▼サンプルのチップセットを改造した物
なお、通常使うチップセットとは別に地形IDを記載したチップセット画像も準備してください。
これがあるとマップを作る時の設定ミスを防ぐ事ができます。
データベース「地形」にて1マスの高さごと(16ピクセルごと)の地形番号を用意してください。
データベース「チップセット」にて、各下層チップに地形IDを設定してください。
動作テスト用のマップを作成してください。
※マップは「横20×縦15・ループなし」で準備してください。
下層チップを設定する時には、地形IDが書かれたチップセットを使って設定すると、
間違えて設定するリスクが減ります。
▲トップへ戻る▲
■高低差処理の確認
基本的にボールは放物線を描いて移動します。
影は地形IDの高さによって上下に変化しながら移動します。
影の位置がボールの位置より上に移動した場合は、
ボールの高さより高い地形(壁)に当たった(または地面に落ちた)と判断されて、
ボールが消えるようにします。
坂道の途中からボールを投げた場合(下のマスの地形番号が小さい時)は、
1マス上のマスから投げた状態にします。
ゲーム画面は2Dで表示されているので、高低差のある立体的な表現には限界があります。
例えば、下図のような状況の場合、影が高さ32ピクセルの地形に当たっているので、
この状態で壁に当たったと判断されて、ボールは消えてしまいます。
これを消えないように改良すると、今度は別の条件の時に、
ボールが不自然に消えたり、逆にボールが全く消えなかったりします。
そのため、ある程度は見た目が不自然な状況が残ります。
▲トップへ戻る▲
■コモンイベントの設定
コモンイベントの設定を行います。
■コモンイベント「放物線移動:キー処理」
イベント開始条件:定期的に並列処理する
◆ラベルの設定:1番
◆キー入力の処理:[0001:キー入力](決定/オプション:OFF)
◆ウェイト:0.0秒
◆条件分岐:変数[0001:キー入力]が0
◆キー入力の処理:[0001:キー入力](決定/オプション:OFF)
◆
:分岐終了
◆注釈:----------------------------
: :初期設定
: :
◆変数の操作:[0002:現在のマップID]代入,主人公のマップID
◆条件分岐:変数[0003:前のマップID]がV[0002]以外
◆変数の操作:[0003:前のマップID]代入,主人公のマップID
◆ピクチャーの表示:1,ボールの影,(160,120)(透明度:100%)
◆ピクチャーの表示:11,ボール,(160,120)(透明度:100%)
◆変数の操作:[0004:飛距離(マス単位)]代入,3
◆変数の操作:[0005:最大の高さ(ドット単位)]代入,32
◆変数の操作:[0006:高さ%合計]代入,78
◆
:分岐終了
◆注釈:----------------------------
: :ボール発射
: :
◆条件分岐:変数[0001:キー入力]が0
◆スイッチの操作:[0001:決定キー押し]をOFFにする
◆指定ラベルへ飛ぶ:1番
◆
:分岐終了
◆条件分岐:スイッチ[0001:決定キー押し続け]がON
◆指定ラベルへ飛ぶ:1番
◆
:分岐終了
◆スイッチの操作:[0001:決定キー押し]をONにする
◆変数の操作:[0011:ボールのX]代入,主人公のX座標
◆変数の操作:[0012:ボールのY]代入,主人公のY座標
◆指定位置の地形ID取得:(V[0011],V[0012]),[0013:ID取得]<主人公位置の高さを取得
◆変数の操作:[0012:ボールのY]加算,1<加算1にして主人公の下のマスにする
◆指定位置の地形ID取得:(V[0011],V[0012]),[0016:ボールの影地形ID]<下のマスの地形ID取得
◆条件分岐:変数[0013:ID取得]がV[0016]より大きい(オプション:ON)<地形IDが変わる坂道の途中にいる時
◆変数の操作:[0015:ボールの影Y]代入,-16<発射位置を上に16ピクセル移動
◆
:それ以外の場合<地形IDが変わる坂道の途中にはいない時
◆変数の操作:[0015:ボールの影Y]代入,0
◆
:分岐終了
◆条件分岐:スイッチ[0011:移動中:ボール01]がOFF
◆変数の操作:[0110:ボール01:高さピクセル]代入,変数[0013]の値<主人公位置の地形IDを設定
◆変数の操作:[0110:ボール01:高さピクセル]乗算,-16<ピクセル単位に変えて発射高さとする
◆変数の操作:[0110:ボール01:高さピクセル]加算,16<1マス分下げる
◆変数の操作:[0101:ボール01:現在位置X]代入,主人公の画面X
◆変数の操作:[0102:ボール01:現在位置Y]代入,主人公の画面Y
◆変数の操作:[0102:ボール01:現在位置Y]減算,変数[0110]の値<発射高さを設定
◆変数の操作:[0102:ボール01:現在位置Y]減算,8
◆変数の操作:[0102:ボール01:現在位置Y]加算,変数[0015]の値<坂道の時の調整ピクセルを加算
◆変数の操作:[0103:ボール01:移動方向]代入,主人公の向き
◆変数の操作:[0104:ボール01:最大の高さ]代入,変数[0005]の値
◆変数の操作:[0106:ボール01:高さ%合計]代入,変数[0006]の値
◆変数の操作:[0107:ボール01:高さ%±]代入,変数[0004]の値
◆変数の操作:[0107:ボール01:高さ%±]乗算,4
◆変数の操作:[0108:ボール01:現在高さ%]代入,0
◆スイッチの操作:[0011:移動中:ボール01]をONにする
◆効果音の演奏:風7
◆
:分岐終了
◆指定ラベルへ飛ぶ:1番
◆ |
■コモンイベント「放物線移動:ボール移動」
イベント開始条件:定期的に並列処理する
◆ラベルの設定: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
◆
:分岐終了
◆注釈:----------------------------
: :高低差チェック
: :
◆変数の操作:[0011:ボールのX]代入,変数[0101]の値<影のX位置をコピー
◆変数の操作:[0012:ボールのY]代入,変数[0102]の値<影のY位置をコピー
◆変数の操作:[0011〜0012]除算,16<除算16でマス単位にする
◆指定位置の地形ID取得:(V[0011],V[0012]),[0009:ボールの高さ]
◆指定位置の地形ID取得:(V[0011],V[0012]),[0016:ボールの影地形ID]
◆変数の操作:[0009:ボールの高さ]乗算,-16<ピクセル単位に変えて発射高さとする
◆変数の操作:[0009:ボールの高さ]加算,16<1マス分下げる
◆変数の操作:[0015:ボールの影Y]代入,変数[0102]の値<影のY位置をコピー
◆変数の操作:[0015:ボールの影Y]加算,変数[0009]の値<影の位置にあった高さ地形のピクセル数にする
◆変数の操作:[0012:ボールのY]代入,変数[0015]の値<表示する影のY位置をコピー
◆変数の操作:[0012:ボールのY]除算,16<除算16でマス単位にする
◆指定位置の地形ID取得:(V[0011],V[0012]),[0017:ボールの影地形ID2]
◆注釈:----------------------------
: :ボールの高さを変更
: :
◆変数の操作:[0108:ボール01:現在高さ%]減算,変数[0107]の値
◆変数の操作:[0010:ボールの表示位置Y]代入,変数[0108]の値
◆変数の操作:[0010:ボールの表示位置Y]乗算,変数[0104]の値
◆変数の操作:[0010:ボールの表示位置Y]除算,変数[0106]の値
◆変数の操作:[0010:ボールの表示位置Y]加算,変数[0102]の値
◆変数の操作:[0010:ボールのY表示位置]加算,変数[0110]の値<発射時の高さを加算
◆注釈:----------------------------
: :ボールの表示
: :
◆条件分岐:変数[0017:ボールの影地形ID2]がV[0016]以上(オプション:ON)<修正した影位置が高い時
◆条件分岐:変数[0015:ボールの影Y]がV[0010]以上(オプション:ON)<影の方がボールより下に表示している時
◆ピクチャーの移動:1,(V[0101],V[0015]),0.0秒(透明度:60%)
◆
:それ以外の場合<影の方がボールより上に表示している時
◆ピクチャーの移動:1,(160,120),0.0秒(透明度:100%)
◆
:分岐終了
◆
:それ以外の場合<修正した影位置の地形IDが低い時
◆ピクチャーの移動:1,(160,120),0.0秒(透明度:100%)
◆
:分岐終了
◆条件分岐:変数[0010:ボールのY表示位置]がV[0015]以上(オプション:ON)<影よりボールが画面下になった時
◆変数の操作:[0010:ボールのY表示位置]代入,変数[0015]の値<ボールの高さを影と同じにする
◆ピクチャーの移動:11,(160,120),0.0秒(透明度:100%)
◆
:それ以外の場合
◆ピクチャーの移動:11,(V[0101],V[0010]),0.0秒(透明度:0%)<設定位置を移動
◆
:分岐終了
◆注釈:----------------------------
◆変数の操作:[0107:ボール01:高さ%±]減算,1
◆条件分岐:変数[0010:ボールのY表示位置]がV[0015]以上<ボールの位置が影の位置より下になった時
◆注釈:----------------------------
: :ボールが着弾(ボールを消す)
: :
◆効果音の演奏:打撃6
◆スイッチの操作:[0011:移動中:ボール01]をOFFにする
◆
:分岐終了
◆
:それ以外の場合
◆ピクチャーの移動:1,(160,120),0.0秒(透明度:100%)
◆ピクチャーの移動:11,(160,120),0.0秒(透明度:100%)
◆
:分岐終了
◆指定ラベルへ飛ぶ:10番
◆ |
▲トップへ戻る▲
■当たり判定も設定している場合
高低差に当たり判定も設定している場合は、
コモンイベント「放物線移動:ボール移動」の設定を以下のように修正してください。
この色の部分は、基礎ページからあった設定です。
この色の部分は、当たり判定の設定です
この色の部分は、高低差の設定です
この色の部分は、当たり判定+高低差の時の設定です
▼イベントIDの当たり判定
■コモンイベント「放物線移動:ボール移動」
イベント開始条件:定期的に並列処理する
◆ラベルの設定: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
◆
:分岐終了
◆注釈:----------------------------
: :高低差チェック
: :
◆変数の操作:[0011:ボールのX]代入,変数[0101]の値
◆変数の操作:[0012:ボールのY]代入,変数[0102]の値
◆変数の操作:[0011〜0012]除算,16
◆指定位置の地形ID取得:(V[0011],V[0012]),[0009:ボールの高さ]
◆指定位置の地形ID取得:(V[0011],V[0012]),[0016:ボールの影地形ID]
◆変数の操作:[0009:ボールの高さ]乗算,-16
◆変数の操作:[0009:ボールの高さ]加算,16
◆変数の操作:[0015:ボールの影Y]代入,変数[0102]の値
◆変数の操作:[0015:ボールの影Y]加算,変数[0009]の値
◆変数の操作:[0012:ボールのY]代入,変数[0015]の値
◆変数の操作:[0012:ボールのY]除算,16
◆指定位置の地形ID取得:(V[0011],V[0012]),[0017:ボールの影地形ID2]
◆注釈:----------------------------
: :ボールの高さを変更
: :
◆変数の操作:[0108:ボール01:現在高さ%]減算,変数[0107]の値
◆変数の操作:[0010:ボールの表示位置Y]代入,変数[0108]の値
◆変数の操作:[0010:ボールの表示位置Y]乗算,変数[0104]の値
◆変数の操作:[0010:ボールの表示位置Y]除算,変数[0106]の値
◆変数の操作:[0010:ボールの表示位置Y]加算,変数[0102]の値
◆変数の操作:[0010:ボールのY表示位置]加算,変数[0110]の値
◆注釈:----------------------------
: :ボールの表示
: :
◆条件分岐:変数[0017:ボールの影地形ID2]がV[0016]以上(オプション:ON)
◆条件分岐:変数[0015:ボールの影Y]がV[0010]以上(オプション:ON)
◆ピクチャーの移動:1,(V[0101],V[0015]),0.0秒(透明度:60%)
◆
:それ以外の場合
◆ピクチャーの移動:1,(160,120),0.0秒(透明度:100%)
◆
:分岐終了
◆
:それ以外の場合
◆ピクチャーの移動:1,(160,120),0.0秒(透明度:100%)
◆
:分岐終了
◆条件分岐:変数[0010:ボールのY表示位置]がV[0015]以上(オプション:ON)
◆変数の操作:[0010:ボールのY表示位置]代入,変数[0015]の値
◆ピクチャーの移動:11,(160,120),0.0秒(透明度:100%)
◆
:それ以外の場合
◆ピクチャーの移動:11,(V[0101],V[0010]),0.0秒(透明度:0%)
◆
:分岐終了
◆注釈:----------------------------
: :当たり判定
: :
◆変数の操作:[0009:ボールの高さ]代入,変数[0010]の値
◆変数の操作:[0009:ボールの高さ]減算,変数[0015]の値<修正する
◆条件分岐:変数[0009:ボールの高さ]が-8以上
◆変数の操作:[0011:ボールのX]代入,変数[0101]の値
◆変数の操作:[0012:ボールのY]代入,変数[0015]の値<修正する
◆変数の操作:[0011〜0012]除算,16
◆指定位置のイベントID取得:(V[0011],V[0012]),[0013:ID取得]
◆条件分岐:変数[0013:ID取得]がV[0041]以上
◆スイッチの操作:[0002:当たり確認]をOFFにする
◆イベントの呼び出し:V[13][V[14]]
◆条件分岐:スイッチ[0002:当たり確認]がON
◆指定ラベルへ飛ぶ:11番
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆注釈:----------------------------
◆変数の操作:[0107:ボール01:高さ%±]減算,1
◆条件分岐:変数[0010:ボールのY表示位置]がV[0015]以上
◆注釈:----------------------------
: :ボールが着弾(ボールを消す)
: :
◆効果音の演奏:打撃6
◆ラベルの設定:11番
◆スイッチの操作:[0011:移動中:ボール01]をOFFにする
◆
:分岐終了
◆
:それ以外の場合
◆ピクチャーの移動:1,(160,120),0.0秒(透明度:100%)
◆ピクチャーの移動:11,(160,120),0.0秒(透明度:100%)
◆
:分岐終了
◆指定ラベルへ飛ぶ:10番
◆ |
▼画面位置の当たり判定
■コモンイベント「放物線移動:ボール移動」
イベント開始条件:定期的に並列処理する
◆ラベルの設定: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
◆
:分岐終了
◆注釈:----------------------------
: :高低差チェック
: :
◆変数の操作:[0011:ボールのX]代入,変数[0101]の値
◆変数の操作:[0012:ボールのY]代入,変数[0102]の値
◆変数の操作:[0011〜0012]除算,16
◆指定位置の地形ID取得:(V[0011],V[0012]),[0009:ボールの高さ]
◆指定位置の地形ID取得:(V[0011],V[0012]),[0016:ボールの影地形ID]
◆変数の操作:[0009:ボールの高さ]乗算,-16
◆変数の操作:[0009:ボールの高さ]加算,16
◆変数の操作:[0015:ボールの影Y]代入,変数[0102]の値
◆変数の操作:[0015:ボールの影Y]加算,変数[0009]の値
◆変数の操作:[0012:ボールのY]代入,変数[0015]の値
◆変数の操作:[0012:ボールのY]除算,16
◆指定位置の地形ID取得:(V[0011],V[0012]),[0017:ボールの影地形ID2]
◆注釈:----------------------------
: :ボールの高さを変更
: :
◆変数の操作:[0108:ボール01:現在高さ%]減算,変数[0107]の値
◆変数の操作:[0010:ボールの表示位置Y]代入,変数[0108]の値
◆変数の操作:[0010:ボールの表示位置Y]乗算,変数[0104]の値
◆変数の操作:[0010:ボールの表示位置Y]除算,変数[0106]の値
◆変数の操作:[0010:ボールの表示位置Y]加算,変数[0102]の値
◆変数の操作:[0010:ボールのY表示位置]加算,変数[0110]の値
◆注釈:----------------------------
: :ボールの表示
: :
◆条件分岐:変数[0017:ボールの影地形ID2]がV[0016]以上(オプション:ON)
◆条件分岐:変数[0015:ボールの影Y]がV[0010]以上(オプション:ON)
◆ピクチャーの移動:1,(V[0101],V[0015]),0.0秒(透明度:60%)
◆
:それ以外の場合
◆ピクチャーの移動:1,(160,120),0.0秒(透明度:100%)
◆
:分岐終了
◆
:それ以外の場合
◆ピクチャーの移動:1,(160,120),0.0秒(透明度:100%)
◆
:分岐終了
◆条件分岐:変数[0010:ボールのY表示位置]がV[0015]以上(オプション:ON)
◆変数の操作:[0010:ボールのY表示位置]代入,変数[0015]の値
◆ピクチャーの移動:11,(160,120),0.0秒(透明度:100%)
◆
:それ以外の場合
◆ピクチャーの移動:11,(V[0101],V[0010]),0.0秒(透明度:0%)
◆
:分岐終了
◆注釈:----------------------------
: :当たり判定
: :
◆変数の操作:[0009:ボールの高さ]代入,変数[0010]の値
◆変数の操作:[0009:ボールの高さ]減算,変数[0015]の値<修正する
◆条件分岐:変数[0009:ボールの高さ]が-8以上
◆条件分岐:変数[0041:敵イベントID開始値]が2以下
◆条件分岐:変数[0042:敵イベントID終了値]が2以上
◆変数の操作:[0011:ボールのX]代入,変数[0101]の値
◆変数の操作:[0012:ボールのY]代入,変数[0015]の値<修正する
◆変数の操作:[0011:ボールのX]減算,敵(ID:02)の画面X
◆変数の操作:[0012:ボールのY]減算,敵(ID:02)の画面Y
◆変数の操作:[0012:ボールのY]加算,8
◆変数の操作:[0011〜0012]除算,8
◆条件分岐:変数[0011:ボールのX]が0
◆条件分岐:変数[0012:ボールのY]が0
◆スイッチの操作:[0002:当たり確認]をOFFにする
◆イベントの呼び出し:敵(ID:02)[1]
◆条件分岐:スイッチ[0002:当たり確認]がON
◆指定ラベルへ飛ぶ:11番
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆条件分岐:変数[0041:敵イベントID開始値]が3以下
◆条件分岐:変数[0042:敵イベントID終了値]が3以上
◆変数の操作:[0011:ボールのX]代入,変数[0101]の値
◆変数の操作:[0012:ボールのY]代入,変数[0015]の値<修正する
◆変数の操作:[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番
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆
:分岐終了
◆注釈:----------------------------
◆変数の操作:[0107:ボール01:高さ%±]減算,1
◆条件分岐:変数[0010:ボールのY表示位置]がV[0015]以上
◆注釈:----------------------------
: :ボールが着弾(ボールを消す)
: :
◆効果音の演奏:打撃6
◆ラベルの設定:11番
◆スイッチの操作:[0011:移動中:ボール01]をOFFにする
◆
:分岐終了
◆
:それ以外の場合
◆ピクチャーの移動:1,(160,120),0.0秒(透明度:100%)
◆ピクチャーの移動:11,(160,120),0.0秒(透明度:100%)
◆
:分岐終了
◆指定ラベルへ飛ぶ:10番
◆ |
▲トップへ戻る▲
■補足
このページの設定は、固定画面(横20×縦15+ループなし)のみで使用できる設定です。
固定画面では無いマップに対応させるには、画面スクロール対応の設定も必要になります。
▲トップへ戻る▲
|