Flash CS3 ドキュメンテーション |
|||
| ActionScript 3.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 イベントも報告します。詳細については、テキスト入力のキャプチャを参照してください。
キーボードイベントの keyCode プロパティと charCode プロパティを使用することで、どのキーが押されたかを判断し、その結果として他のアクションをトリガできます。keyCode プロパティは、キーボードのキーの値に対応する数値です。charCode プロパティは、現在の文字セットにおけるそのキーの数値です。デフォルトの文字セットは UTF-8 で、ASCII をサポートしています。
キーコード値と文字値の主な違いは、キーコード値がキーボードの特定のキーを表すのに対し、文字値は特定の文字を表すことです。キーコード値では、キーパッドの 1 はキーボードの一番上の行の 1 とは異なりますが、"1" を生成するキーと "!" を生成するキーは同じです。文字値では、R と r は異なります。
|
メモ |
|
ASCII でのキーとその文字コード値の間のマッピングについては、キーボードのキーとキーコードの値を参照してください。 |
キーとキーコード間のマッピングは、デバイスやオペレーティングシステムによって異なります。このため、キーマッピングを使用してアクションをトリガしないでください。代わりに、Keyboard クラスによって提供される事前定義された定数値を使って、適切な keyCode プロパティを参照します。たとえば、Shift キーのキーマッピングを使用する代わりに、Keyboard.SHIFT 定数を使用します (前のサンプルコードを参照)。
他のイベントの場合と同様、キーボードイベントシーケンスは、コードで addEventListener() メソッドが割り当てられた順番ではなく、表示オブジェクト階層によって決定されます。
たとえば、次の例に示すように、container というムービークリップ内に tf テキストフィールドを配置し、キーボードイベント用のイベントリスナーを両方のインスタンスに追加すると仮定します。
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 より先にキーボードイベントを処理します。たとえば、Microsoft Internet Explorer では、Ctrl + W を押すと、表示されている SWF ファイルがキーボードイベントを送出する前に、ブラウザウィンドウが閉じます。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000311.html