「チャージショット」とループ脱出のTIPS

「チャージショット」とループ脱出のTIPS

 今回は一般に「チャージショット」または「溜め攻撃」と呼ばれるやつを作ってみたいと思います。
 ひとことにそう言ってもゲージ消費型から待ちガイルまでいろいろなので、まずはサンプルFlashをごらんください。

画面クリック:開始
カーソルキー左右:移動
X:ジャンプ
D:攻撃
D押しっぱなし:チャージ

 Dキーで通常弾発射、そのまま押しっぱなしにしているとオーラがだんだん溜まってきて、青いオーラまでチャージできたらDキーを放すとチャージショット発射です。

 では制作。
 まずは準備として、弾の処理を先に作っておきましょう。
 ガジェット「石」というのが今回の弾になります(右図)。
 弾をどんな動きにするかはほとんど好みの領域なので、説明もさらっと。放物線を描く「ジャンプ」式のうごきで、壁や地面や他のガジェットにぶつかると〈当たった〉とみなされるというかんじに作ってあります。弾の軌道は「移動とジャンプの設定」のパラメータ調整でお好みに(画像)
 ぶつかった弾は動作プログラム「敵や壁にぶつかった」に切り替わって(画像)、壊れるアニメを経由して「消滅」動作プログラムでそのまま消滅します(画像)
 このガジェットを「弾1」「弾2」として登録(画像)。パラメータを見ればおわかりのとおり、弾1は通常弾、弾2はチャージショットとして設定してあります。

 弾そのものはこれでよしとして、次はプレイヤーキャラの動作を準備していきましょう。
 ノーモーションで弾を発射するというのもアリですが、ここではせっかくなので発射モーションを追加します。たとえば動作プログラム「待機」から発射するとしたら、条件「Bボタンを押した瞬間」で切り替わる動作プログラム「投げる1」(画像)と、その直後に切り替わる「投げる(弾出る)」(画像)が発射モーションになりますね。
 「投げる1」はふりかぶる予備動作で、「投げる(弾出る)」で実際に動作「弾を発射する」(この場合は弾1)を実行しています。なぜ2つに分けたかというと、ひとつには〈動作の途中で弾を出そうとするとややこしいから〉、もうひとつは〈予備動作がいらない場合もあるから〉です。
 たとえば今回のサンプルではチャージショットの場合、ふりかぶる予備動作を使わずに即チャージショットを発射することにしています(動作プログラム「溜め撃ち投げる(弾出る)」(画像))。このあたりもわりあい感覚的な問題ですが。

 ほかには、ジャンプ中。足場のないジャンプ中にふりかぶるのも不自然な気がしたので、これも予備動作なしでいきなり発射することにします。
 ただし、ジャンプ中の弾発射については、もっと注意しないといけないポイントがあります。それは「移動速度」が食い違ってしまうこと。「投げる(弾出る)」動作プログラムでは「移動速度」が0.00に設定してあるので、ジャンプ中に切り替えると横方向の移動がその場で停止してしまいます。

 というわけで、「投げる(弾出る)」動作プログラムと別に、移動速度を設定した(画像)「ジャンプ用投げる(弾出る)」を用意しました(右図)。
 同じようにチャージショットに使う動作プログラム「溜め撃ち投げる(弾出る)」にも、対応する「ジャンプ用溜め撃ち投げる(弾出る)」を作ります(同じく右図)。

 整理すると、

  1. 通常弾(弾1)の発射:「投げる1」→「投げる(弾出る)」
  2. 通常弾(弾1)のジャンプ中発射:「ジャンプ用投げる(弾出る)」
  3. チャージショット(弾2)の発射:「溜め撃ち投げる(弾出る)」
  4. チャージショット(弾2)のジャンプ中発射:「ジャンプ用溜め撃ち投げる(弾出る)」

 という、計4パターンの発射モーションがあることになります。動作プログラム「ジャンプ」から分岐するのが (2) と (4) なのはいうまでもありません。
 あとは、通常弾の発射(1・2)とチャージショットの発射(3・4)をどう切り分けるか、ですね。

 ここは簡単にスイッチ機能を使いましょう。スイッチ「溜め攻撃」を用意して、ONになったら問答無用でチャージショット発射(いつスイッチをONにするかは、もっと後で説明します)。OFFだったらチャージショットはスルーして、条件「Bボタンを押した瞬間」で通常弾発射とします(左図)。

 ここまでで準備はひととおり終了。いよいよチャージ処理に入りますが、まずはチャージ中に表示されるオーラの用意から始めてみましょう。
 今回はオーラをガジェットとして用意して、プレイヤーキャラにぴったりくっつけるようにしてみました(もっと凝りたければ、プレイヤーキャラの動作を〈ノーマルな待機〉〈チャージ中の待機〉〈チャージ満タン状態の待機〉というように、チャージ状態別に複数もつことになるでしょう)。
 プレイヤーにへばりついて移動する方法もいろいろありますが、ここは単純なやり方にしておきます。
 まずオーラのガジェット「溜め攻撃用」を「弾3」として登録します(画像)。次にプレイヤーの動作プログラムの先頭で、この弾3を発射しておけば(画像)準備は完了(動作プログラム「溜め攻撃用ガジェット発生」)。

 ここからは発射された弾3ことガジェット「溜め攻撃用」の内容。とりあえずこれがなくては始まらない、プレイヤーにくっつく動作(画像)を設定しておきます(動作プログラム「プレイヤーの方へ移動」)。
 これだけではプレイヤーが移動すると置いていかれてしまうので、さらに直後(0.04秒後)にそっくり同じ動作プログラム「└プレイヤーの方へ移動」を呼び出すようにします(画像)。だんだんおなじみになってきたループ処理ですね。
 おさらいがてら動作プログラムの変化の流れを追ってみると、「プレイヤーの方へ移動」→「└プレイヤーの方へ移動」→「プレイヤーの方へ移動」→「└プレイヤーの方へ移動」→……と0.04秒ごとにお互いを呼び出しあってループしています。このくり返しのおかげでガジェットは常にプレイヤーに(急制動などがないかぎりできるだけ)くっついて動くわけです。

 でも、なぜ0.04秒? たとえば0.02秒しか経過していないときは、どうなるのでしょう。それは切り替え条件を満たしていないということですから、ループをスルーしてそれより下位の動作プログラム(「溜め表示空白時間」)の切り替え条件チェックをすることになります。
 2つの動作プログラムの間を単純にループし続けていると、それ以外の動作ができなくなってしまうので、このようにループを脱出して他の動作プログラムに切り替えるスキを作っておくのも大事です。ちなみに経過時間が0.01秒だと、フレームレートの合間になにごともなく過ぎてしまう危険があるので、この例のように0.02秒単位で作っておく方がいいでしょう。

 ループとループ脱出の関係がわかったところで、次の動作プログラム「溜め表示空白時間」を見ていきましょう。
 まず黄色オーラを出す……より前に、0.50秒だけ時間つぶしをすることにします(実際にやってみるとわかりますが、空白期間をおかずに黄色オーラを出すと、まだ弾を投げてもいないうちからいきなりオーラが出て不自然に感じるのです)。
 この時間つぶしのカウント用に、「溜め開始までの空白」という0.50秒のアニメーションをひとつ用意しておきます(画像)。アニメーションと言いつつ中身はただの透明な画像を表示するだけですが。
 これを動作プログラム「溜め表示空白時間」で、アクションとして呼び出します。ちなみにこの動作プログラムも0.04秒経過したことを条件に「溜め表示空白時間」→「└溜め表示空白時間」→「溜め表示空白時間」→……と2つの動作プログラムをくり返すループですね。

 0.50秒の空白を終えて黄色いオーラを表示するには、このループを脱出する必要があります。
 ここで使うのが、アニメーションを使ったループ脱出のミニテクニックです。
 このループ「溜め表示空白時間」「└溜め表示空白時間」では、(透明なので見た目にわかりづらいですが)同じアニメーションを指定して表示しています。実はこのように〈連続した動作プログラムが同じアニメーションを指定している〉場合、アニメーションは動作プログラムが切り替わっても巻き戻らずに継続してアニメを続けます。
 今回の場合だと、動作プログラム「溜め表示空白時間」ループ中は全0.50秒のアニメーションを途切れずに表示していることになります。

 このことを頭に入れたまま、ループ脱出の条件を見てみましょう(右図)。
 チャージショットらしく〈Bボタンを押されている〉ことが条件なのはさておき、「アニメーションの表示が全て終わった」が主要な条件になっているのがわかると思います。この場合だと、〈ループ中に0.50秒経過した〉と言い換えていいでしょう。これもアニメーションが最初から最後までリセットされずに表示され続けているからできることですね。途中に別のアニメーションの再生がまじると再生位置もリセットされるのでこの方法は使えないことに要注意。

 そうそう、空白時間を脱出するもう1つのパターンとして、チャージ中にボタンを放したらリセットする条件も忘れずにつけておきましょう(画像)
 そこさえ忘れなければ、ここ以降はさっきのループと同じ要領で時間をカウントすればいいので簡単です。オーラの表示ループから条件「アニメーションの表示が全て終わった」で、時間とともに次のオーラに切り替えましょう(画像)

 青いオーラは動作プログラム「溜め打ち可能状態」のループ。今回は時間に関係なく、「Bボタンを放した瞬間」を条件に(つまりチャージショットの発射ということになりますね)動作プログラム「溜め撃ち用スイッチON」に切り替わります(画像)
 そこではなつかしのスイッチ「溜め攻撃」をONにしているので(画像)、ガジェット「石」がチャージショットになるという寸法。
 Bボタンを放してしまったのでチャージは終わり。動作プログラムを強制的に「プレイヤーの方へ移動」に戻して、通常ショット用にスイッチをOFFにしておきます。ただし、スイッチがめまぐるしくON→OFFされるとチャージショット発射までうまくたどりつけない危険があるので、切り替え条件に0.04秒ほどタイムラグを作っておきます(画像)

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

利用方法

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

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

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

交信なう