「半自動エレベーター」でループ処理を考える

「半自動エレベーター」でループ処理を考える

 プレイヤーが乗る「足場」にもいろいろあります。
 これまでリフトやすり抜け床、壊れるブロックなどなど作ってきましたが、今回は「乗ると動く」足場。例によってFlashサンプルで動作を確認してみてください。

画面クリック:開始
カーソルキー左右:移動
X:ジャンプ

 足場に乗ると下降して、足場から離れるとまた元の位置に戻っていきます。
 実は左側の足場は戻りのスピードを遅くした応用編になっているのですが、ここから先の説明は右側の基本編について(サンプルファイルではガジェット「乗ると動く足場A」)。
 今回ポイントになるのは、下降した足場が元の位置に戻るときの、その「元の位置」を判断する方法。これがないとどこまでも上に昇ってしまうので大事です。
 これまでのサンプルにもヒントはありますが、今回はまったく別のやりかたとして、条件を満たすまで同じ動作をくりかえす「ループ」というワザを[メモリー]を利用して作ってみます。

 まずは基本になる「待機」動作プログラム(左図)。
 見ての通り、これといって何もしていません。
 この上に乗ると下に降りていくようにするわけですから、条件[上に乗られた]で動作プログラム「下降」に切り替えることにします(画像)

 動作プログラム「下降」で足場を下に降ろすしくみですが、基本的には下方向に移動するだけです(画像)

 ここで後々のためにやっておくのが、[メモリー]の値を1だけ足すこと(右図)。さらに動作プログラム「下降」とまったく同じ挙動の動作プログラム「下降(ループ)」に即座に切り替えるようにします(これも右図)。
 つまり、プレイヤーが上に乗っているかぎり動作プログラム「下降」→「下降(ループ)」→「下降」→「下降(ループ)」→……とえんえんくり返しているわけです。
 くり返せばくり返すほど足場は下に降りていき、メモリーも1ずつ増えていきます。最初ゼロだったメモリーが〈降りていったぶんだけ〉数が増えるわけで、この数字は実質〈足場が降りた距離〉を示しているわけですね。
 いったいなんのため? というと、それは足場を上昇させる場面で使うためです。そこの説明はまだ先なので、いまはとりあえず頭のすみにおいておくだけにしておきましょう。

 足場の下降中にやることはもう少し残っています。
 プレイヤーが乗っているかぎり下に降り続けるといっても、足場が地面を突き抜けて下降してしまっては大変なので、動作プログラムの切り替え条件を作っておきましょう(画像)
 もうひとつ、下降中の足場からプレイヤーが離れることも考えられますね。実はここまでに作った動作プログラムの分岐「地面にぶつかった」「下降(ループ)」のどっちにも切り替わらないということは、イコール足場からプレイヤーが離れたということ(こう書くと「あれ、そんなことになってたっけ?」という感じですが本当です。条件を見直してみるとわかるでしょう)。というわけで、その下に動作プログラム「下降用待機」に強制的に切り替わる分岐を作っておきます(画像)

 それではいま出てきた2つの新しい動作プログラム「地面にぶつかった」「下降用待機」について説明。
 まず「地面にぶつかった」ですが、やることといえばすぐさま動作プログラム「下降用待機」に切り替えることだけだったりします(画像)。実質的に「地面にぶつかった」イコール「下降用待機」ですね。
 最初から「下降用待機」ではいけないのか? という疑問ももっともですが、動作プログラム「下降」から分岐する[次の動作プログラム]それぞれの条件を考えると、「地面にぶつかった」と「下降用待機」は別々に用意しなければいけなかったんですね。
 では問題の「下降用待機」ですが、この動作プログラムの目的を簡単に言うと、足場をその位置で停止させるか、それとも上昇させるかのチェック用です。
 実際にゲーム中に起こるパターンを考えてみましょう。足場が地面に着いたとき、プレイヤーが乗っているあいだはその場所に停止します。逆に足場が地面に着いていても、プレイヤーが離れていれば足場は上昇し始めますね。
 というわけで、[上に乗られた]条件を満たしているときは動作プログラム「下降用待機(ループ)」に切り替わります(画像)。名前でおわかりでしょうが、これも「下降用待機」とそっくりな内容で、交互に切り替えあうループ処理です。
 逆に言えば、[上に乗られた]を満たさなくなった(プレイヤーが足場から離れた)ときにこのループから抜け出すことになります。となると、足場が上昇するということ……かといえば、必ずしもそうではないのです。

 プレイヤーが足場から離れていても、足場が上昇しないパターンがひとつだけあります。それは、足場が元の定位置にあるという場合。
 たしかに足場が元の位置をこえてぐんぐん上昇してしまったら大変です。
 以上をふまえると「下降用待機」から「上昇」に動作プログラムを切り替える条件は、右図のようになります。

 見覚えのあるものが出てきましたね。そうです、このために下降中にメモリーに数字を足し続けていたのです。
 [数値]がゼロより[大きい]かぎり、動作プログラム「上昇」に切り替えます。足場が最初の位置にあったときは[数値]がゼロでしたから、これをまとめて言えば〈足場が元の定位置にないかぎり、動作プログラム「上昇」に切り替える〉ということになります。

 それではいよいよ上昇シークエンスをやっつけましょう。
 足場が上昇する動作は、左図で見ての通り。おそらく予想通りだと思います。
 これまた予想通りに、上昇中はメモリーから1引くループをくり返します(画像)。もうループもすっかりおなじみになりました。
 マイナス1しながら上昇して、元の位置(ゼロ)に戻ったら動作プログラム「待機」に切り替えとなります(画像)

 ここまでくると忘れそうになりますが、足場の上昇中にまたプレイヤーが乗りなおすこともありえます。そういうときのために、分岐をひとつ用意しておきましょう。今までに作った「下降」動作プログラムに切り替えるだけでいいでしょう(画像)

 これで半自動エレベーターはひととおり完成です。
 最後にちょっとした応用として、上昇スピードだけ遅い足場(サンプルの左側ですね)の作り方のヒントだけ。
 といっても、あまり難しいことはしていません。
 移動速度を遅くするのが第一、つぎにメモリーの変化量をそのスピードに比例して減らせばOKです。つまりこういうことですね(画像)

 ここまでのサンプルが入ったgpdファイルのダウンロードはこちらから。

利用方法

ダウンロードしたファイルは圧縮されていますので、各種解凍ソフトをお使いになって解凍してください。
解凍したフォルダ内にある、拡張子が“gpd”のファイルがアクションゲームツクールのプロジェクトデータです。このファイルを、プロジェクトデータを収めているフォルダ(デフォルトでは[マイ ドキュメント](Windows Vistaでは[ドキュメント])→[ACTkoolData])に入れ、アクションゲームツクールの[続きから]で読み込んでご利用ください。
※データのご利用前に、エディターを最新版にアップデートしておいてください。(アップデートプログラムはこちら

サンプルデータに関するご注意

このサンプルデータはスマイルブームが独自に制作したものです。
データについてのお問い合わせは、スマイルブームの担当メールアドレス(下記)宛にお願いいたします。
tkoolsupport@smileboom.com

交信なう