トップページ > Flash入門 > マウス・キーボード関係(5)
キーボードが押されたかどうかを判定するには,画面自体(stage)に対して KeyboardEvent.KEY_DOWNイベントを登録します。 各キーに割り当てられた番号(keyCode)を見ることで,どのキーを押されたのかを判定することができます。 とりあえず,画面にkeyCodeを表示するFlashを作ってみます。
KEY_DOWNイベントで呼ばれる関数(今回は“onKeyDown”という名前)の引数として,KeyboardEvent型のパラメータ が(今回は適当に“e”という名前にしています)あります。 この引数の中にkeyCodeパラメータがあるので,これを表示するだけです。
package { import flash.display.Loader; import flash.display.Sprite; import flash.display.Bitmap; import flash.events.Event; import flash.text.*; //キーボード関係のイベントクラスを読み込む import flash.events.KeyboardEvent; //画面サイズと背景色,フレームレートを設定 [SWF(width="300", height="300", frameRate = "60", backgroundColor="0xffffcc")] public class Main extends Sprite { //キーコード表示用テキストフィールド public var tf:TextField = new TextField(); //main関数 public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } //コンストラクタ private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point //フォント設定 var format:TextFormat = new TextFormat(); format.size = 48; //tfにフォント設定を登録 tf.defaultTextFormat = format; //テキストフィールドの寸法は自動調整 tf.autoSize = TextFieldAutoSize.LEFT; //テキストフィールドの位置決め tf.x = 5; tf.y = 110; //初期表示内容 tf.text = "keyCode = "; //stageに追加 addChild(tf); //============================================================ //stageにキーボードイベントを登録 this.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); //============================================================ } //================================================================ //なにかキーが押された時に呼ばれる関数 private function onKeyDown(e:KeyboardEvent):void { tf.text = "keyCode = " + e.keyCode.toString(); } //================================================================ } }
カーソルキー(↑↓→←)の入力で画像が動くようにします。 KeyboardEvent.KEY_DOWNで呼ばれる関数(“onKeyDown()”)の中で, カーソルキーに対応して画像の座標を変更します。
package { import flash.display.Loader; import flash.display.Sprite; import flash.display.Bitmap; import flash.events.Event; //キーボード関係のイベントクラスを読み込んでおく import flash.events.KeyboardEvent; //画面サイズと背景色,フレームレートを設定 [SWF(width="300", height="300", frameRate = "60", backgroundColor="0xffffcc")] public class Main extends Sprite { //画像ファイルを読み込む [Embed(source = "./ClearBall_pink.png")] public var ballImg:Class; //"ball"をクラス変数として定義 public var ball:Bitmap = new ballImg(); //main関数 public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } //コンストラクタ private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point //画像を表示 addChild(ball); //============================================================ //stageにキーボードイベントを登録 this.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); //============================================================ } //================================================================ //なにかキーボードが押された時に呼ばれる関数 private function onKeyDown(e:KeyboardEvent):void { //"→"キーの時 if (e.keyCode == 39) { ball.x += 2; } //"←"キーの時 else if (e.keyCode == 37) { ball.x -= 2; } //"↑"キーの時 else if (e.keyCode == 38) { ball.y -= 2; } //"↓"キーの時 else if (e.keyCode == 40) { ball.y += 2; } } //================================================================ } }