ジャンプアクションゲームで、ちょっとした移動のアクセントになる「トランポリン」風動作。今回はこれについてじっくり考えてみます。
カーソルキー左右:移動
X:ジャンプ
今回はサンプルFlashの動作を見てもらうのが一番わかりやすそうですね。
青いブロックの上に乗っただけでピョンと跳ねるのと、青いブロックに乗ったタイミングでジャンプすればハイジャンプになるのが確認できると思います。
実はこの基本動作をつくること自体はそれほど難しくなかったりします。
ブロックの設定として、プレイヤーがブロック上に乗ったときにメモリー「プレイヤーを強制ジャンプ」を変更するようにすればいいのです(画像)。
メモリー「プレイヤーを強制ジャンプ」は、プレイヤーのジャンプと同期する機能もかねているので、単純に乗ったとき・乗ってジャンプした時、両方の動作がこれで完成します。
ついでにブロックに乗ったときにブロックが下に凹むようなアニメーションを設定しておくと、視覚的にわかりやすくていいでしょう。
ここまでは比較的簡単。
ところが、サンプルにあるようにトランポリンブロックを横一列に並べたときはこれだけではうまくいきません。
ネックになるのは〈プレイヤーが2つのトランポリンブロックに同時に乗ることがある〉こと。トランポリンブロックが並んでいれば普通に起こることですが、何の設定もしていないと「プレイヤーを強制ジャンプ」が二重にかかってしまい、普通に乗っただけでスーパージャンプになってしまいます。
どうすればいいでしょう?
ここではスイッチを利用します。
左の図は、トランポリンブロックの初期状態「待機」動作プログラムの内容です。
上に乗ったら動作プログラム「上に乗られた」に切り替わります。
ここで、スイッチ「強制ジャンプ制御」がOFFになっていることに注目。このスイッチが次の動作で役立ちます。
動作プログラム「上に乗られた」の中身を見てみましょう(右図)。
「アニメーションの表示が全て終わった」が次の動作プログラムの切り替え条件になっていますが、これは踏んで凹んだブロックが戻ってくるアニメーションです(本筋とは関係ないので、あまり気にしないでおきましょう)。
そしてさっき見たスイッチ「強制ジャンプ制御」がOFFなら、さらに動作プログラム「強制ジャンプ」(画像)に切り替わります。
「強制ジャンプ」ではメモリーを使ってトランポリンの動作をしていますが、一緒にスイッチ「強制ジャンプ制御」をONにしているのがポイント。
動作プログラム「上に乗られた」では、スイッチ「強制ジャンプ制御」がONだと動作プログラム「ジャンプしない」に切り替わる(画像)ようになっています。
つまり、トランポリン動作中は、スイッチ「強制ジャンプ制御」がONなので、それ以上二重三重のトランポリン動作をしないようになっているんですね。
ところで、トランポリン動作である「強制ジャンプ」やそのキャンセル動作「ジャンプしない」が終わったら、動作プログラムはもとの「待機」に戻ります。
そこまでは当然のようでも、その切り替え条件に「一定時間経過した」を付ける(画像)のは忘れてしまいがちかもしれません。
なぜわざわざタイムラグをつけるのかというと、動作プログラム「待機」にはスイッチ「強制ジャンプ制御」をOFFにする機能がついているからなんですね。
このスイッチがタイムラグなしにすぐOFFになってしまうと、すぐさま「強制ジャンプ」動作が始まってしまうので、やっぱりメモリー「プレイヤーを強制ジャンプ」が二重にかかってしまいます。
論理的には正しくても感覚的には盲点になりそうなので、注意しておきたいですね。
最後に、サンプルファイルにはオマケとして、トランポリンブロックを〈下から叩かれた〉動作の2つのパターンが入っています。
1つは叩けば叩くだけポコンと軽く跳び上がるタイプ。もう1つはいちど叩くとそれ以上ポコンとしなくなるタイプ。前回の「壊れるブロック」から派生ですが、今回のトランポリンに至る過程がわかりやすいかもしれません。
ここまでのサンプルが入ったgpdファイルのダウンロードはこちらから。
利用方法
ダウンロードしたファイルは圧縮されていますので、各種解凍ソフトをお使いになって解凍してください。解凍したフォルダ内にある、拡張子が“gpd”のファイルがアクションゲームツクールのプロジェクトデータです。このファイルを、プロジェクトデータを収めているフォルダ(デフォルトでは[マイ ドキュメント](Windows Vistaでは[ドキュメント])→[ACTkoolData])に入れ、アクションゲームツクールの[続きから]で読み込んでご利用ください。
サンプルデータに関するご注意
このサンプルデータはスマイルブームが独自に制作したものです。データについてのお問い合わせは、スマイルブームの担当メールアドレス(下記)宛にお願いいたします。
tkoolsupport@smileboom.com