リスナーで
stage.addEventListener(KeyboardEvent.KEY_DOWN, onDown);
と
stage.addEventListener(KeyboardEvent.KEY_UP, onUp);
いずれかのキーが押されているかどうかを聞くだけです。ハンドラ onDown() および onUp() では、魔女キーが実際に押されたことを確認する必要があります。通常、コードをきれいに保つためにスイッチを使用して行われます。次に例を示します。
private function onDown(e:Event):void
{
switch(e.keyCode)
{
case 65: // this is the keycode for key "a"
keyAPressed = true;
break;
}
}
動きについては、次のようないくつかの変数を作成することをお勧めします。
private var isMoving:Boolean = false;
private var leftPressed:Boolean = false;
private var rightPressed:Boolean = false;
private var goingLeft:Boolean = false;
これにより、次のようなループでより良いコントロールを得ることができます:
private function movementLoop():void
{
if (! isMoving)
return; // if the char's not moving it's safe to return the function
if (goingLeft)
x -= movementSpeed;
else
x += movementSpeed;
}
このサイトを使用して、すべてのボタンのキーコードを確認できます: http://www.kirupa.com/developer/as3/using_keyboard_as3.htm
この例からわかるように、動きは、ボタンを押すことによってではなく、タイマーまたは ENTER_FRAME イベントによって呼び出すことができるループで処理されます。多くの理由で重要ですが、そのうちのいくつかは次のとおりです。
- キーを押したままにして、移動コマンドをスパムしていません。
- キーボード ハンドラが小さくなり、読みやすくなり、新しい実装で拡張できるようになりました
- isMoving 変数と direction 変数を変更することで、同じメソッドで NPC を動かすことができます。
- 上記と同じように、マルチプレイヤー ゲームでこのデータをサーバーに送信します。
- 左と右の両方を押すと、変数はプレイヤーを左と右の両方に動かそうとするのではなく、移動の方向を切り替えることができます。
ご質問にお答えできれば幸いです。
幸運を!