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」で動かすことが可能になる。さらに、こうしておけばエネミーを「キーボードの入力」でプレイヤーが動かすことも可能になる。


明日は、この仮想化に対応する。