アクションゲームの完成
~トラップの作成とデバッグ。そして完成へ~
ニードルトラップを作る!
今回のアクションゲームでは、エネミー(敵)は登場しないが、アクションゲームによくあるトラップは2種登場する。床に設置されているニードルと飛来してくるミサイルである。エネミーは登場しないものの、PCとの当たり判定はトラップもエネミーも基本的に同様なので、今回解説するトラップの作成と当たり判定が役立つだろう。
また、PCとの当たり判定については、前回、メダルの作成時に図入りで解説したので、前回を参照しつつ読んで頂きたい。
(1)ステージへの配置
ニードルトラップは下通路の床に設置されており、接触すると常にダメージを受ける[1]。
ニードルトラップは、Fla画面1のように配置してあり、これは、PCのサイズや移動量、スクロール速度、メダルとの位置(トラップに当たらずメダルを取れるか)といった関連とのバランスを見て配置位置を決めてある。こういったバランス如何によってゲームのプレイ難度が変わってくるため、ステージデザインや調整は重要となる。
なお、実際のflaファイルはGameAct_final.fla(Flash CS3用のもの、またはFlash 8用のもの)を確認してほしい。
(2)作成と当たり判定
それでは、ニードルトラップ自体はどう作ってあるか、ニードルトラップのクリップ内へ入って解説していく。
ミサイルトラップを作る!
(1)ステージへの配置
次に、ミサイルトラップは、Fla画面3のように上通路に仕掛けられたトラップで、PCが上通路に侵入すると画面外から発射される。このミサイルは、詳しくは後述するが、発射後はFlashの機能であるトゥイーンで移動させている。
(2)作成と移動 そして当たり判定
それでは、ミサイルトラップのクリップ内へ入って解説していくが、このミサイルトラップは、Fla画面4のように、ミサイルが発射されるとトゥイーンで移動させている[2]。トゥイーンではなく数ピクセル単位でX座標方向へ移動させてもいいのだが、Flashの便利機能であるトゥイーンを用いて作るのもFlashならではの作法であるし、今回のゲームでのミサイルトラップの場合、トゥイーンで手軽に実現できてしまうので、作例サンプルとしてトゥイーンを用いた。
ミサイルトラップのタイムラインはこのようになっているが、紙面の都合上、③と⑤について解説し、その他は実際のflaファイル(GameAct_final.fla)に詳しくコメントしてあるので、そちらを参照頂きたい。
③PCと衝突!? callで当たり判定処理を呼び出す
このゲームでのPCは、上通路と下通路に移動する(PCの配置Y座標が変わる)ことはあっても、前後に移動しない(PCの配置X座標は変わらない)ので、PCが上通路にいれば、ミサイルをトゥイーンで横移動させても必ず特定のフレームでPCとミサイルは衝突する。この利点から、Flashの便利機能トゥイーンを用いてミサイルを飛ばした。そして、衝突するフレームは13~15になるので、そこにcall文を書き、⑤の当たり判定処理を呼び出す作りにしてある。
⑤PCとの当たり判定処理
⑤は、③に記したcall("hit")で呼び出されるサブルーチン。ここでは、PCにダメージを与える処理とミサイルを爆発絵に変える処理を書いてある。
ミサイルトラップは、座標によるクリップ同士の判定は行っていないが、参考までにクリップサイズの比較を載せた。
デバッグして完成!
こうして、4回に渡って制作してきたアクションゲームも作るべき仕様が全て入り、残すは最終デバッグとゲーム調整のみとなった。今回のサンプルゲーム(GameAct_final.fla)は、デバッグとゲーム調整を済ませたものなのでスムーズに動作しているが、実際の制作時には、次のポイントを制作途中や最終デバックの中で調整してきている。
- ゲーム遷移の確認と調整
- タイトル画面(今回はロゴ画面)からゲーム中へ。ゲーム中の遷移。そしてゲームオーバー画面orゲームエンド画面へ。タイトル画面への戻り。これらについて正しく遷移するか表示タイミングはどうかなどをチェック。
- 画面表示の確認と調整
- 全ての画面において、正しく表示されているか、端末上で見やすいかをチェック。
- キー入力の確認と調整
- 端末上でキー入力が正しく行えているかをチェック。
- 各動作の確認と調整
- PCの動作、トラップやメダルの動作、スクロール、スコア、制限時間などが正しく動作するかをチェック。
- 当たり判定の確認と調整
- PCとトラップやメダルは動作していても、当たり判定がしっかり行えているか、判定の辛さ甘さはどうか、端末上で何度もプレイして確認と調整を行う。これは、ゲームの遊びやすさやプレイ難度に関わるので重要。
- 計算式や判定の確認と調整
- 例えば、PCのHP(耐久)バーは、見た目に動作していても正しくHPが減少していないかもしれない。あるいは、メダルを取ってスコアが加算されていても、正しい得点が加算されていないかもしれない。仮に、メダルの連続取りでボーナス点がプラスされる仕様だった場合、ボーナスを加算するかの判定や計算式に誤りがあると、メダルを取って加算はされていても正しいボーナス点が加算されない現象が起こる。…などのチェック。
- 変数の確認と調整
- 変数は上記した各チェックと関わり合うものであるが、こういうミスの可能性もあり得る。それは、デバッグ用に変数値を変えた場合(例えば、PCがすぐ死なないようにトラップの攻撃力を減らしていた。あるいは、何かのチェックのためにフラグ値を変えていたなど)、その値を戻し忘れて納品してしまうケース。
- ゲーム難度、ゲームバランスの調整
- せっかく作ったゲームが自分にしかプレイできないゲーム難度では意味がないし、その逆に簡単すぎても遊びがいがない。そこで、ステージデザインの調整、攻撃力などのデータ調整、当たり判定の調整、アイテムやメダルの出現調整、ご褒美となるスコアやボーナス得点の調整など、可能な限りゲーム難度やバランス調整を行う。
- その他
- ゲーム特有仕様の動作確認と調整。サウンドが正しく鳴るかの確認。端末から時間情報や電波情報などを所得している場合のチェック。…などなど。
アクションゲームレクチャーの最後に…
4回に渡り、長々とお付き合い頂き感謝です。今回、連載の最初として基本的なアクションゲームの作り方をレクチャーしてきましたが、Flashゲーム制作に慣れた方には物足りなく思えたかもしれませんし、不慣れな方にはもっとシンプルな内容を望まれたかもしれません。
しかし、まだ始まったばかりですので、今後のレクチャー予定の中には、よりゲーム性高い内容、よりプログラマ技術高い内容、そして、慣れた方にも不慣れな方にも役立つテクの色々も盛り込んでいければと練っていますので、引き続きお付き合いくださいませ。
今回のアクションゲームについては、機会があれば、PCのアクションを増やしたり、エネミーを登場させたり、もっと変化のあるステージにしたりなど、グレードアップしたサンプルでの解説も行えればと構想しています。