ActionScript版White Curtainを3時間で作るプロジェクト(その4)

■キーをとれるようにする。

さてさっきのメインのクラスで、
わざわざchildっていう名前のSpriteオブジェクトを間にはさんでいたわけだが、
これはキーをとれるようにするためのものであった。

キーイベントを取得しなくてよければ、いきなり自分に対して、
addChild(new Bitmap(g.getBitmapData());
でOKだったんだが、これではうまくキーイベントがとれないようだ。


仕方なくSpriteオブジェクトを一旦addして、
それに対してJGraphicsのBitmapを貼り付けることで、
Spriteオブジェクトに対するキーをハンドルするようにしているわけだ。


このとき、childのfocusRectをfalseにしておかないと
黄色い枠が出てしまってダサいので注意すること。


public var key:int = 0;
こんな変数をつくって、
//ハンドラの追加 child.addEventListener(KeyboardEvent.KEY_DOWN,keyPressed); child.addEventListener(KeyboardEvent.KEY_UP,keyReleased); child.addEventListener(MouseEvent.CLICK,clicked);
こんな風にハンドラを追加して、
//キーダウンイベントの処理 private function keyPressed(ev:KeyboardEvent):void { switch (ev.keyCode) { case 38: key |= 1; break; // 上 case 39: key |= 2; break; // 右 case 40: key |= 4; break; // 下 case 37: key |= 8; break; // 左 case 13: case 32: key |= 16; break; // スペース } } //キーアップイベントの処理 private function keyReleased(ev:KeyboardEvent):void { switch (ev.keyCode) { case 38: key &= ~1; break; // 上 case 39: key &= ~2; break; // 右 case 40: key &= ~4; break; // 下 case 37: key &= ~8; break; // 左 case 13: case 32: key &= ~16; break; // スペース } }
こんな風にキーのハンドラを書くと、 キー押下状態が変数keyに入るってわけだ。
ソース全体 これで、キーがとれて、描画ができて、 1フレームに一回ハンドラが呼ばれるようになった。 つまり、もうゲームができたも同然ってわけさ。 それにしてもカーソルキーで動くようにするとブラウザの画面も動いちまって困るな。 つづく