トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

キーボード情報取得_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.