!!!キーボード情報取得 ゲームなどでキーボードからの入力を拾う方法は、3つくらいあります。 !!最後に押されたキー情報を取得 あるタイミングで(正確には、ActionScriptを書いているそのタイミングで) 発生するキー情報を取得する関数として「Key.getAscii」「Key.getCode」があります。 !Key.getAscii 「Key.getAscii()」にて、最後に押されたキーのASCIIコードを返します。 文字列入力などの場合に(英字の大文字・小文字の区別など含む)利用できます。 num = Key.getAscii(); 戻り値として、入力されたキーのASCIIコードが返ります。 !Key.getCode 「Key.getCode()」は、英字の大文字・小文字などの区別なく、「押されたキー」に 対するキーコードを返します。 num = Key.getCode(); 戻り値として、入力されたキーのキーコードが返ります。 キーコードについては後述します。 !!複数のキー押下情報を取得 ゲームでは複数のキー入力が判定できる必要があります。 この場合は上記の「Key.getAscii」「Key.getCode」とは逆の形で、 「指定のキーが押下状態であるかどうか」を検出することで行います。 たとえば以下の場合、[X]キーが押された場合にif内に入ります。 if(Key.isDown(String("X").charCodeAt(0))) { //[X]キーが押された } 「Key.isDown(キーコード)」がtrueの場合、そのタイミングで(ActionScript処理の タイミングで)指定のキーコードのキーが押されている、と判定されます。 英字キーの場合は、 resX = Key.isDown(String("X").charCodeAt(0)); resZ = Key.isDown(String("Z").charCodeAt(0)); resA = Key.isDown(String("A").charCodeAt(0)); のようにして、大文字の英字のコードを取得して判定しています。 上記の場合、 Xキーが押されている場合はresXがtrueに、 Zキーが押されている場合はresZがtrueに、 Aキーが押されている場合はresAがtrueに、となります。 resUP = Key.isDown(Key.UP); とすると、矢印キーの↑が押された場合にresUPがtrueになります。 !!キーコード 「String("A").charCodeAt(0)」とすると英字の文字コードとなりますが、 その他の矢印キーやEnterキーなどの制御キーは以下のように定義されています。 ,キーコード,対応キー ,Key.LEFT,[←]キー ,Key.RIGHT,[→]キー ,Key.UP,[↑]キー ,Key.DOWN,[↓]キー ,Key.BACKSPACE,[BackSpace]キー ,Key.DELETEKEY,[Delete]キー ,Key.ENTER,[Enter]キー ,Key.ESCAPE,[Esc]キー ,Key.HOME,[Home]キー ,Key.END,[End]キー ,Key.PGDN,[PageDown]キー ,Key.PGUP,[PageUp]キー ,Key.SPACE,[Space]キー ,Key.TAB,[Tab]キー ,Key.SHIFT,[Shift]キー !!キー押下イベントを受け取るコールバック これ以外に「イベント」としてキー入力情報を取得する方法があります。 といっても、「Key.getCode」との組み合わせにはなりますが、キーが押されたとき・キーが離されたとき、の状態にて情報を取得することができます。 これは「押されたときに(あるいは離されたときに)」イベントに飛びますので、 ActionScriptで記述したフレームのタイミングで、というわけではありません。 ある意味、一番たしかな方法かもしれません。 !キーイベント取得関数の定義 「onKeyDown」「onKeyUp」関数を作成し、ここに処理内容を記述する(キーのリスナー設定を行う)ことでキー押下処理を定義します。 この段階では、まだキーイベントの取得は動きません。 myListener = new Object(); //キーが押されたときに呼ばれる myListener.onKeyDown = function() { code = Key.getCode(); //キーコードの取得 .... } //キーが離されたときに呼ばれる myListener.onKeyUp = function() { code = Key.getCode(); //キーコードの取得 .... } 複数のキーが同時に押された場合、といっても電気信号的に「同時押し」はありえません。ほんとに微妙な差で優劣ができます。 そのため、上記の処理でも同時押し(に見える)場合のキー入力処理をまかなうことができます。 ゲームにおけるキャラクタ移動の処理などを行う場合は、「onKeyDown」イベントにて 取得できるキーコードを処理するとよいでしょう。 !キーイベントの登録 「Key.addListener」により、引数に定義したオブジェクト(ここではmyListener) を渡すことでキーイベントの取得を開始します。 この段階で、キーが押された・離された場合にonKeyDown/onKeyUp関数内の処理がおこなわれます。 Key.addListener(myListener); !キーイベントの破棄処理 「Key.removeListener」により、キーイベントの処理を破棄します。 Key.removeListener(myListener);