キーボード入力のキャプチャFlash Player 9 以降、Adobe AIR 1.0 以降 InteractiveObject クラスから操作モデルを継承する表示オブジェクトは、イベントリスナーを使用してキーボードイベントに応答できます。 例えば、ステージにイベントリスナーを配置してキーボード入力を監視し、それに応答できます。 次のコードでは、イベントリスナーでキーの押し下げをキャプチャして、キー名とキーコードのプロパティが表示されます。 function reportKeyDown(event:KeyboardEvent):void { trace("Key Pressed: " + String.fromCharCode(event.charCode) + " (character code: " + event.charCode + ")"); } stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown); Ctrl キーなどの一部のキーには字形表現がありませんが、キーを押すとイベントが生成されます。 上記のコード例では、キーボードイベントリスナーがステージ全体のキーボード入力をキャプチャします。 ステージ上の特定の表示オブジェクトに対してイベントリスナーを記述することもできます。このイベントリスナーは、オブジェクトにフォーカスがあるとトリガーされます。 次の例では、ユーザーが TextField インスタンス内に入力した場合のみ、キーストロークが出力パネルに表示されます。 Shift キーを押したままにすると、TextField の境界線の色が一時的に赤に変わります。 このコードは、ステージ上に tf という名前の TextField インスタンスがあることを前提としています。 tf.border = true; tf.type = "input"; tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); tf.addEventListener(KeyboardEvent.KEY_UP,reportKeyUp); function reportKeyDown(event:KeyboardEvent):void { trace("Key Pressed: " + String.fromCharCode(event.charCode) + " (key code: " + event.keyCode + " character code: " + event.charCode + ")"); if (event.keyCode == Keyboard.SHIFT) tf.borderColor = 0xFF0000; } function reportKeyUp(event:KeyboardEvent):void { trace("Key Released: " + String.fromCharCode(event.charCode) + " (key code: " + event.keyCode + " character code: " + event.charCode + ")"); if (event.keyCode == Keyboard.SHIFT) { tf.borderColor = 0x000000; } } TextField クラスは、ユーザーがテキストを入力したときに監視できる textInput イベントも報告します。詳しくは、テキスト入力のキャプチャを参照してください。 注意: AIR の実行時に、キーボードイベントはキャンセルできます。Flash Player の実行時に、キーボードイベントはキャンセルできません。
キーコードおよび文字コードキーボードイベントの keyCode プロパティと charCode プロパティを使用することで、どのキーが押されたかを判断し、その結果として他のアクションをトリガーできます。keyCode プロパティは、キーボードのキーの値に対応する数値です。charCode プロパティは、現在の文字セットにおけるそのキーの数値です。デフォルトの文字セットは UTF-8 で、ASCII をサポートしています。 キーコード値と文字値の主な相違点は、キーコード値がキーボードの特定のキーを表している(キーパッドの 1 は一番上の行の 1 とは異なるが、「1」を生成するキーと「!」を生成するキーは同じキーである)のに対し、文字値は特定の文字を表している(R と r の文字は異なる)ことです。 注意: ASCII のキーとその文字コード値とのマッピングについて詳しくは、『Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド』の flash.ui.Keyboard クラスの項を参照してください。
キーとキーコード間のマッピングは、デバイスやオペレーティングシステムによって異なります。 このため、キーマッピングを使用してアクションをトリガーしないでください。 代わりに、Keyboard クラスによって提供される事前定義された定数値を使って、適切な keyCode プロパティを参照します。例えば、Shift キーのキーマッピングを使用する代わりに、Keyboard.SHIFT 定数を使用します(前のサンプルコードを参照)。 KeyboardEvent の優先度他のイベントの場合と同様、キーボードイベントシーケンスは、コードで addEventListener() メソッドが割り当てられた順番ではなく、表示オブジェクト階層によって決定されます。 例えば、次の例に示すように、tf というテキストフィールドを container というムービークリップ内に配置し、キーボードイベント用のイベントリスナーを両方のインスタンスに追加すると仮定します。 container.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); container.tf.border = true; container.tf.type = "input"; container.tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown); function reportKeyDown(event:KeyboardEvent):void { trace(event.currentTarget.name + " hears key press: " + String.fromCharCode(event.charCode) + " (key code: " + event.keyCode + " character code: " + event.charCode + ")"); } テキストフィールドとその親コンテナの両方にリスナーがあるため、reportKeyDown() 関数は TextField 内でのキーストロークごとに 2 回呼び出されます。キーが押されるたびに、テキストフィールドの方が container ムービークリップより先にイベントを送出します。 オペレーティングシステムや Web ブラウザーは、Adobe Flash Player または AIR より先にキーボードイベントを処理します。例えば、Microsoft Internet Explorer では、Ctrl + W を押すと、表示されている SWF ファイルがキーボードイベントを送出する前に、ブラウザーウィンドウが閉じます。 |
![]() |