図3●スクリプトを記述するためのレイヤーを追加して(左下の青丸内のアイコンをクリック),それぞれに名前を付ける(名前のところをダブルクリック)
図3●スクリプトを記述するためのレイヤーを追加して(左下の青丸内のアイコンをクリック),それぞれに名前を付ける(名前のところをダブルクリック)
[画像のクリックで拡大表示]
図4●インスタンス名をmyShipに設定
図4●インスタンス名をmyShipに設定
[画像のクリックで拡大表示]
図5●ステージの座標系(幅300,高さ200にした場合)
図5●ステージの座標系(幅300,高さ200にした場合)
[画像のクリックで拡大表示]
リスト2●図4のインスタンスを移動させるコード
リスト2●図4のインスタンスを移動させるコード
[画像のクリックで拡大表示]
リスト3●矢印キーでインスタンス(myship)を上下左右に移動させるコード
リスト3●矢印キーでインスタンス(myship)を上下左右に移動させるコード
[画像のクリックで拡大表示]
表1●押されたキーとキーコード,プロパティの対応付け
表1●押されたキーとキーコード,プロパティの対応付け
[画像のクリックで拡大表示]

インスタンスを移動させる

 タイマー処理の仕組みがわかったところで,ゲームを作成していきましょう。新規のFlashドキュメントを開き,スクリプト用のレイヤーを一つ追加します。ゲームの画面を作成するレイヤーにmain,スクリプト用のレイヤーにscriptと名前を付けます(図3[拡大表示])。

 まずは,ステージ上に配置したムービークリップのインスタンスをActionScriptのプログラムで動かす方法を見てみましょう。これはとても簡単です。

 タイムライン上のmainレイヤーをクリックし,ステージ上に適当な宇宙船の絵を一つ書き,選択しておきます。次に,メニューで[修正]-[シンボルに変換]とたどって(あるいは[F8])「シンボルに変換」ダイアログボックスを表示し,myShipというシンボル名を付けて登録します。

 次に,このインスタンスに名前を付けます。先ほどの宇宙船の絵(インスタンス)を選択した状態で,メニューで[ウィンドウ]-[プロパティ]とたどり(またはCtrl+[F3]),[プロパティ]パネルを表示します。このパネルで[インスタンス名]欄にmyShipと入力すれば*6,この宇宙船をmyShipという名前でActionScriptのプログラムから扱えるようになります(図4[拡大表示])。

 インスタンス(myShip)を用意できたら,scriptレイヤーのタイムラインをクリックしてから,[アクション]パネルを表示します。リスト2[拡大表示]のコードを記述したら,ムービープレビューで動作を見てみましょう。インスタンスの位置が次第に移動していきますね。

 ムービークリップのインスタンスは,あらかじめ表示位置を管理する_xプロパティと_yプロパティを持っています。_xが横方向,_yが縦方向の座標となります。インスタンスの座標は,ムービークリップがメインのタイムラインにある場合,ステージの左上隅を(0, 0)とし,_xプロパティは増加するほど右に,_y座標は増加するほど下になる形で管理されています(図5[拡大表示])*7リスト2ではタイマー処理の繰り返しごとに_xプロパティの値を増加,_yプロパティの値を減少させましたから,右上に移動していったわけです。

矢印キーで移動するように
処理を変更する

 移動の方法がわかったところで,今度はキーボードの入力からインスタンスを移動させる処理を作成しましょう。キーボードからの入力を調べて,それに応じて_xプロパティ,_yプロパティの値を変化させるようにコードを変更します。

 ActionScriptには,キーボードからの入力に対する処理に便利なKeyクラスが用意されています。Keyクラスを使えば「どのキーが押されているか」といった情報や「最後に押されていたキーは何か」といった情報を簡単に取得できます。

 Keyクラスは,newキーワードを使わなくてもそのまま使用できるトップ・レベルのクラスです。つまり,

k = new Key();
k.メソッド

のようにしなくても,いきなり

Key.プロパティ
Key.メソッド

というようにKeyクラスのプロパティやメソッドを使用できます*8。「現在,特定のキーが押されているか」を判定するには,KeyクラスのisDownメソッドを使用します。isDownメソッドは,引数として指定されたキーコード*9のキーが押されている場合にはtrueを返し,押されていない場合にはfalseを返します。

 Keyクラスを使って矢印キーの左右で移動するようにリスト2のコードを変更してみましょう。まず,左の矢印キーが押されているかどうかを判定します。表1より,isDownメソッドで「37」を引数として判定すればよいことがわかります。しかし,単に37と書いたのでは,後でコードを見直したときにわかりにくいですね。わかりにくいコードはバグの原因です。

 Flashでは,よく判定を行うキーのキーコードは,Keyクラスのプロパティとして,わかりやすい形であらかじめ用意されているのです(表1[拡大表示])。そこで,isDownメソッドの引数に37と書く代わりに,Key.LEFTとして判定しています(リスト3の(1)[拡大表示])。右矢印キー,上矢印キー,下矢印キーについても同様です。

 判定の結果,矢印キーが押されていることがわかったら,それぞれの矢印キーに応じて,_xプロパティと_yプロパティの値を加算したり減算することで移動を行っています。加算したり,減算する際には,コードの冒頭で宣言・定義した変数SHIP_SPEEEDを使います。これで矢印キーに応じて移動するインスタンスができあがりました。

下記のURLから、サンプル・プログラムを無償ダウンロードできます。
http://software.nikkeibp.co.jp/software/download/down04c.html#200412