キーボード情報取得_Flash
キーボード情報取得
ゲームなどでキーボードからの入力を拾う方法は、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);
Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.