「ハシゴ」でチェック漏れ対策をまなぶ

「ハシゴ」でチェック漏れ対策をまなぶ

 今回のテーマは横スクロールアクションでは比較的おなじみ「ハシゴ」。
 おなじみすぎて、ハシゴと言って頭に思い浮かぶものがバラバラだったりもするので、今回はめずらしくきちんとした仕様を先に考えてみました。

  • ハシゴに重なって上ボタンを押すとハシゴをつかむ。ハシゴに重なっただけでは何も起きない。
  • ハシゴの下端で上ボタンを押すとハシゴをつかむ。
  • ハシゴをつかんでいる状態で上/下ボタンを押すと上下移動。左右ボタンで移動はしない。
  • ハシゴをつかんでいる状態でジャンプボタンを押すと、その場でハシゴから手を放す。このとき一緒に左/右ボタンを押していると低いジャンプになる。
  • ハシゴをつかんでいる状態で、ハシゴの下端で下ボタンを押すとハシゴから手を放す。
  • ハシゴをつかんでいる状態で、ハシゴの上端に達したらそれより上には移動できない。

 なんだかこむずかしくなってしまったので、サンプルFlashでひとつずつ確認してもらうとわかりやすいでしょう。

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

 サンプルの画面上の方には、ざっくりとした内部動作の確認用表示もつけておきました。
 これを見るだけでもうなんとなく、どういうつくりになっているかわかった人も多いのでは?
 と言ってもそれだけではさすがにさびしいので、順につくりを確認していきましょう。

 今回のハシゴは「ハシゴ上」「ハシゴ」「ハシゴ下」の3つのガジェットで作ります(左図)。先頭に書いた仕様のとおり、ハシゴの上端と下端では通常のハシゴと処理が違うので、それ用に用意した特殊なガジェットが「ハシゴ上」と「ハシゴ下」。それ以外のタテに伸びるハシゴは、普通の「ハシゴ」ガジェットを単純にタテに並べて作ることにします。

 「ハシゴ上」「ハシゴ下」に関して言うと、大事なのはメモリー操作です。
 たとえば「ハシゴ上」。プレイヤーが触っている間はループします(もうおなじみですがこの場合をあえて説明すると、条件を満たしているかぎりほぼ同一の動作プログラム「プレイヤーが触った」と「└プレイヤーが触った」を入れ替わりくり返し続けるということです)。このループ内ではメモリー「ハシゴ上下チェック」を[1.00]にしておきます(画像)
 言いかえれば、ガジェット「ハシゴ上」に触っている間ならメモリー「ハシゴ上下チェック」は常に[1.00]ということですね。サンプルFlashでジャンプを駆使して右のハシゴの上端に乗っかるとわかりやすいでしょう。
 ガジェット「ハシゴ上」に触っていない間は、絶対に動作プログラム「待機」を呼び出すようにしてあります。確率を使って〈直前の条件を満たしていないなら100%呼び出す〉方法(画像)で、これもおなじみの方法ではありますね。
 この「待機」動作プログラムではメモリー「ハシゴ上下チェック」を[0.00]にしています。ガジェットに触っていない間はこのメモリーの値はゼロということですね(そのまま!)。
 「ハシゴ下」もやっている事はほとんど同じです。ループ中(触っている間)はメモリー「ハシゴ上下チェック」が[2.00]になる(画像)のがいちばん大きな違いですね。
 これもサンプルFlashでハシゴの下端にプレイヤーキャラを重ねてみるとよくわかるでしょう。

 それではいよいよ本格的になってくる「ハシゴ」ガジェットの解説。
 動作プログラムがいくつもありますが、まずは「メモリ変更」ループを見てみましょう。
 これはプレイヤーがハシゴに触っている間じゅうくり返されるループですが、ここでは大きくわけて2つの処理をしています。
 ひとつめはメモリー「ハシゴ触ってる」を[1.00]にしておくこと。もうひとつはスイッチ「ハシゴ」をONにしておくこと。(画像) 何だかメモリーもスイッチも似たようなものっぽく見えますが、前者は主に細かいチェック用に、後者はプレイヤーキャラの動作の条件判断に使います。
 なんのことかわかりづらいので、具体的に説明していきましょう。
 このガジェット「ハシゴ」には引っかかりやすいワナがひとつあります。「ハシゴ」ガジェットはタテに並べて長いハシゴにするのですが、そうなると〈1段目のハシゴからたったいま離れたけど2段目のハシゴにはたったいま触れたところ〉というような状況が生まれてきます(実際にはプレイヤーの当たり判定とハシゴのサイズのかねあいで、ますますややこしいです)。こういう時に[プレイヤーが触った]チェックで動作プログラムを切り替えていると、ハシゴに触っていても〈いまプレイヤーが離れたところ〉という判断が優先される可能性があって困りますね。
 そこで、このガジェットでは動作プログラムをいくつか組み合わせて、できるだけ〈抜け〉が起きないようにしてみました。順番に見ていきましょう。
 まずハシゴに触れるのをやめると、動作プログラム「メモリ変更」ループから抜けるので動作プログラム「触られていない」に切り替わります(画像)。ここまではおなじみの条件の使い方ですね。
 切り替わった動作プログラム「触られていない」では、そんな名前のわりに本当に触ってないのかどうか検証を始めます。この動作プログラムの中ではいったんメモリー「ハシゴ触ってる」を[0.00]にしてはいますが、それはそれとしてもう1回[プレイヤーが触った]り、または(プレイヤーが別のハシゴガジェットに触って)メモリー「ハシゴ触ってる」が[1.00]になったりしたら、今度は「時間調整」動作プログラムに切り替えます(画像)
 いっぽう、本当に[プレイヤーが触った]になっていなければ、もはや間違いなくハシゴに触っていない、と判断して「待機」動作プログラムに移ってスイッチ「ハシゴ」もOFFにしています。このスイッチは後でプレイヤーの動作の判断に使われることになります。
 さて、動作プログラム「触られていない」でプレイヤーがやっぱり触っていたり別のハシゴに触れていたりと、チェック漏れが起きそうなときに移ってくる動作プログラム「時間調整」。これは、[プレイヤーが触った]かどうかもう1度だけチェックして、触っていれば再度「メモリ変更」ループに戻します(画像)。逆に触っていないようなら「時間調整」のまま、次にもう1回触られるまでなにごともなく動作を停止します。つまりこの動作プログラムはおおむね「待機」動作プログラムとよく似ているのですが、スイッチ「ハシゴ」はいじらない(ONのまま)というのがポイントになります。他のハシゴガジェットに触っている可能性もあるので、ここではスイッチをどうこうしないのです。

 けっこう複雑な話をしてしまったので、実際に動作プログラムがどう切り替わっているのか、色分けをしたサンプルFlashでご確認ください。

時間調整:青色
メモリ変更 / └メモリ変更:赤色
触られていない:緑色

 動作プログラムが「触られていない」から「時間調整」に変わるのは一瞬なので、目視は難しそうですが。

 ハシゴ関係のガジェットについてはここまでにしておきます。
 これだけではハシゴの動作にならないので、次からはプレイヤーのハシゴに対する動きを作っていきましょう。
 最初はとっかかりになる、ハシゴをつかむ処理「ハシゴつかんだ」動作プログラムから。
 この動作プログラムに移行するには、仕様どおりハシゴに触っていて(=スイッチ「ハシゴ」がONで)上ボタンを押したとき、が条件になりますね(画像)
 動作プログラム「ハシゴ掴んだ」は文字通りハシゴをつかんだ状態なので、「移動方向」で動きを殺しておきます(画像)。次にこの状態からの分岐をボタンと状態ごとにひとつずつ、淡々と処理していきます。地味な作業ですが、とりこぼしさえしなければそれほど難しいことはないでしょう。

 メモリー「ハシゴ上下チェック」の値が[1.00](つまりハシゴの最上段)で上ボタンが押されれば動作プログラム「ハシゴ一番上」に(画像)、左/右ボタンを押されてもハシゴをつかんだまま横移動はできないので「ハシゴ移動制限」(画像)、もちろん上下移動に「ハシゴ移動↑」「ハシゴ移動↓」、ジャンプボタンでハシゴを降りる「ジャンプ解除」と続きます。「ハシゴ移動↑」より先に、移動してはいけない「ハシゴ一番上」を置いているのもポイント。この順序が逆だと、ハシゴの上端だと判断するより先に上ってしまいますからね。

 動作プログラム「ジャンプ解除」は基本的にはハシゴをつかんだ状態でジャンプボタン、という状態のことですが、スイッチ「ハシゴ」がOFFになったとき(=何かの拍子にプレイヤーがハシゴから外れたとき)にも同じく分岐することにしてあります(画像)。言ってみればすべりどめとか保険のようなものでしょうか。

 さっきちょっと出てきた、ハシゴをつかんでいる状態で左右移動を禁止する動作プログラム「ハシゴ移動制限」ですが、具体的には動作の詳細で「移動方向を指定しない」を使います(画像)。これだと一見上下動も制限されそうですが、左右ボタンを押したときにしか呼び出されない動作プログラムなのでこれでいいのです。
 ちなみに押しているボタンを放せば、元の動作プログラムに戻します(画像)。わかりやすいですね。ほかにも〈左右押しっぱなしでジャンプボタンを押したとき〉なんかもありえますが、これもハシゴをつかんでいる状態と基本的に同じ設定です。

 ハシゴを上下に移動する動作プログラムも、特に複雑なことはないでしょう。今回の仕様では左右移動しないので、[動作中の方向変更を受け付けない]にチェックを入れています(画像)
 上に移動する場合、メモリー「ハシゴ上下チェック」が[1.00]になったら(=ハシゴの上端に達したら)動作プログラムを切り替えるのも忘れずに!

 説明の最後に、〈ハシゴの下端についてそのまま落下する場合〉についても条件をつくっておきましょうか。こうなるのはハシゴを下方向に移動している時にかぎられるので、動作プログラム「ハシゴ移動↓」から。条件判断にはメモリー「ハシゴ上下チェック」を使います(画像)

 他にもジャンプ中や待機モーション中にハシゴをつかむ場合など、プレイヤーの動作の数だけハシゴとかかわる場面がないか考えなければいけませんが、あとは根気の問題で見落としさえなければ問題ないでしょう。サンプルファイルのプレイヤーガジェットから確認するとわかりやすいかもしれませんね。

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

利用方法

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

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

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

交信なう