アクションゲーム製作 1-2

アクションゲーム製作 1-2 〜 落下と着地 〜


横スクロールタイプのアクションゲームではジャンプが必要不可欠な事が多いと思います。
見るだけなら簡単に思えるジャンプの動作ですが、
一体どうやって再現しているのか考えてみましょう。


落下

ジャンプは飛び上がって落下すると言う動作です。
Y 移動量である cYadd 変数に代入し、
移動計算すれば上に移動させる事ができますが、
それだけでは落下はできません。

ではどうすれば良いか。

現実では物は重力によって引っ張られる事で落下します。
常に下方向に移動すると考えるなら、
cYadd の値を加算すると言うのはどうでしょうか。

左右移動のスクリプトに以下のように付け加えてみましょう。

0 yoko_move 3  3 
1 add_lim cYadd  1 8
2 char_move

保存してから実行すると、
キャラクターが落下したと思います。
これがいわゆる重力のような要素となってきます。

add ではなく add_limit を使っているのは、
落下し続けている間、
無制限に cYadd に加算され、
移動量が大きくなりすぎてしまう為の対処です。

ですがこのままでは画面外に出てしまうので、
マップで着地する為の床を作りましょう。


着地

着地をする為の床を作りたいと思います。

マップチップには item.png を指定してください。
マップ情報はとりあえず変更の必要は無いので OK ボタンを押し、
そのままマップチップ ID 1 のチップを、
下の図のように画面下部に横一列に配置して保存します。



シーンイベントに戻り素材を登録したら、
描画領域にマップチップ描画イベントを作成し、
次はスクリプトでマップチップと衝突させましょう。

マップチップとの衝突をさせる関数を入力支援から探してみてください。

“衝突”もしくは“マップ”のカテゴリ内に、
map_hit_act と言う関数があるのが見つかったでしょうか。

この関数はマップチップとの衝突判定を行い、
重ならないように移動量や座標を修正してくれる関数です。

移動をしてからでなければ衝突したかどうかの判断はできない為、
移動をした後に実行しなければなりません。
よって char_move の後に map_hit_act を入力します。

とくに map_hit_act 関数のような座標を修正する関数に関しては、
相手と衝突判定が重なった場合、
戻り値に衝突したかどうかの値は格納されますが、
座標の修正は行われない所に注意してください。

引数の値に関しては、
引数1は描画イベント、
引数2は今後使うのでとりあえず b0 、
引数3と4は判定をするマップチップ ID 番号なので、
先ほど配置したマップチップの ID 1 を入力します。

スクリプトは以下のようになります。

0 yoko_move 3  3 
1 add_lim cYadd  1 8
2 char_move
        
3 map_hit_act 8 b0 1 1
※対象イベント ID は任意で調節してください

スクリプトを実行する前にキャラクターイベントで衝突判定を設定するのを忘れないようにしましょう。
だいたい画像の大きさくらいに合わせて矩形判定を設定します。



衝突判定が設定できたら実行してみましょう。



画像のようにキャラクターチップの上にキャラクターが乗っかるような状態になったでしょうか。
うまくできたら次はジャンプの作成に進みます。

→『アクションゲーム製作1-3』につづく



▲フレームが表示されない人はクリック