前回は,タイル状に敷き詰めたマップ上を移動するRPG(ロール・プレイング・ゲーム)の移動画面を作成しました(図1左[拡大表示])。今回は,マップ上で敵に出会ったときに表示される戦闘画面を作成してみましょう(図1右)。戦闘画面の作成を通じて,ムービークリップ・シンボルのパーツ化,クラス・ファイルの使用方法,メッセージ・キューとして配列を扱うプログラミング手法を学習していきます。
戦闘画面を
シンボルとしてパーツ化する
戦闘画面は,移動画面上に開くウィンドウのような形で作成します。まず,新規にFlashドキュメントを作成し,任意のフォルダに名前を付けて保存します*1。次に戦闘画面として表示するムービークリップ・シンボル(以下「シンボル」)battleWindowを用意します。メニューより,[挿入]→[新規シンボル](または,ショートカット・キー[F8])とたどり,シンボルを作成し,コードから呼び出せるように,SBattleWindowと識別子を付けておきます(図2[拡大表示])。このシンボルを動的にマップ画面から呼び出して戦闘を開始するわけです。
シンボルbattleWindowは,図3[拡大表示]のように画面を作成します。画面を作成する際には,後で表示する場所を指定しやすいように,中心点を左上として絵やインスタンスを配置していきます*2。
敵を表示する部分には,フレームごとに異なる敵のイラストを描いたシンボル(enemyCard)をあらかじめ作成しておき,インスタンスenemyCard0~enemyCard2として配置します*3。味方の情報を表示するstatus0~status2は,図4[拡大表示]の四つのダイナミック・テキストを持つシンボル(statusWindow)のインスタンスです*4。さらに,攻撃対象の敵を指定するselector,テキストを表示するダイナック・テキストmsgTextを用意します。
また,今回の戦闘処理用のコードは,すべてシンボルbattleWindowのタイムライン上に記述します。戦闘処理用のグラフィックスやコードを戦闘画面のシンボル内で一括して管理するわけですね。オブジェクト指向プログラミングのクラスを使った管理方法と良く似た考え方と言えます。
配列を利用して
メッセージ・キューを
作成する
戦闘画面の基本的な仕組みとして,任意のキーを押すたびにメッセージを次々と表示する処理を作成してみましょう(リスト1[拡大表示])。表示したいメッセージは配列を使って次のように管理します。
まず,表示したいメッセージを格納する配列msgQueueと,メッセージを表示するための関数showMsgを用意します。関数showMsgでは,配列msgQueueの先頭の要素をshiftメソッドで取り出して(1),ダイナミック・テキストmsgTextに表示します(2)。shiftメソッドは,配列の先頭の要素を取り出し,同時に元の配列から削除します。関数showMsgを実行するたびにmsgQueueに格納されている文字列が順番に取り出されて,メッセージとして表示されるわけです。
この関数showMsgを,前回に説明したリスナー・オブジェクトを使用して,ユーザーがキーを押すたびに実行するようにします。表示したいメッセージをpushメソッドを使って順番に配列に格納しておき(3),Keyクラスに対してaddListenerメソッドを実行してリスナー・オブジェクトkeyListenerを登録すればOKです(4)。
シンボルbattleWindowのメインのタイムラインのアクション・パネルに,リスト1のコードを記述し,メニューより[制御]→[シーンプレビュー]とたどり(または,ショートカット・キー[Ctrl]+[Alt]+[Enter]),シンボル単位でプレビューを行うシーンプレビューを行ってみましょう。最初に「敵が現れた!」というメッセージが表示され,以降,任意のキーを押すたびに,配列に格納したメッセージが順番に表示されていくことを確認できます*5。動作を確認したらリスト1のコードを,アクション・パネルからすべて削除しておいてください。
下記のURLから、サンプル・プログラムを無償ダウンロードできます。
http://software.nikkeibp.co.jp/software/download/down05c.html#200503