2Dアクション・テンプレート:入力の対応(基本)
=入力の取得方法=
キーボードからの入力の取得だけであれば、以下のコードを追加することで確認できる。
入力関係のものをインクルードする
//Input import flash.ui.Keyboard; import flash.events.KeyboardEvent;
Initに入力関係の初期化を追加する
{//Init Input //キーが押された時(KEY_DOWN)に、OnKeyDownが呼ばれるようにする stage.addEventListener(KeyboardEvent.KEY_DOWN, OnKeyDown); //キーが離された時(KEY_UP)に、OnKeyUpが呼ばれるようにする stage.addEventListener(KeyboardEvent.KEY_UP, OnKeyUp); }
入力に対応した処理を行う
//キーが押された時の処理 private function OnKeyDown(event:KeyboardEvent):void{ if(event.keyCode == Keyboard.LEFT){ //十字キー:左が押された時の処理 //... } if(event.keyCode == Keyboard.RIGHT){ //十字キー:右が押された時の処理 //... } if(event.keyCode == Keyboard.UP){ //十字キー:上が押された時の処理 //... } if(event.keyCode == Keyboard.DOWN){ //十字キー:下が押された時の処理 //... } } //キーが離された時の処理 private function OnKeyUp(event:KeyboardEvent):void{ if(event.keyCode == Keyboard.LEFT){ //十字キー:左が離された時の処理 //... } if(event.keyCode == Keyboard.RIGHT){ //十字キー:右が離された時の処理 //... } if(event.keyCode == Keyboard.UP){ //十字キー:上が離された時の処理 //... } if(event.keyCode == Keyboard.DOWN){ //十字キー:下が離された時の処理 //... } }
あとは、OnKeyDown(キーボードが押された時の処理)で、画面(前回のm_GraphicParent_Game)をスクロールするなり、LoadImage_Playerで作ったImageを保持しておいて動かすなりすればいい。注意点としては、「キーボード押しっぱなし」にすることで「OnKeyDown」のみが連続で呼ばれることがあること。単純な座標移動だけであれば問題ないが、「OnKeyDown」と「OnKeyUp」で対応関係を作っている場合は注意が必要。
=仮想化=
キーボードへの対応は以上だけで済むが、ここでも先のために特殊な処理:「入力の仮想化」を行うことにする。
「入力の仮想化」とは、「キーボードの入力」や「ジョイスティックによる入力」を統合し、「Enterキーが押された」や「Aボタンが押された」という情報を「決定ボタンが押された」という抽象的な情報に変更するものである。これにより、例えば、プレイヤー側は「キーボードからの入力か、あるいはジョイスティックからの入力か」ということを気にせず、「ショットボタンが押されたからショットする」という処理に専念できる。
これらの「入力」は必ずしも「人間」からの入力である必要はなく、「AI」からの入力であっても良い。つまり、「AI」からの情報も「キーボード」などと同様に扱うことにより、エネミーやプレイヤーも「AI」で動かすことが可能になる。さらに、こうしておけばエネミーを「キーボードの入力」でプレイヤーが動かすことも可能になる。
明日は、この仮想化に対応する。