今天在做一个节拍游戏,在加入了KeyboardEvent至主类后,发现调试的时候,无法响应键盘的响应,只能响应其中的空格键。翻查了下资料,没发现写的类有什么问题。
以下是其中的代码:
public function RhythmGame(){
music = new SoundProcessor(BACKGROUND_MUSIC_PATH);
cursor = new CursorController(0);
cursor.name = "cursor";
cursor.start();
trace("begin");
addChild(cursor);
KeyList = new Object();
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUpHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownHandler);
stage.addEventListener(Event.ENTER_FRAME, onHitTest);
}
//Key up event handler
private function onKeyUpHandler(e:KeyboardEvent):void{
delete KeyList[e.keyCode];
}
//Key down event handler
private function onKeyDownHandler(e:KeyboardEvent):void{
KeyList[e.keyCode] = true;
}
//Check the cursor posistion when key press
public function onHitTest(e:Event):void{
var numChild:Number = this.numChildren;
var obj:Object = new Object();
obj = this.getChildByName("cursor");
if (KeyList[Keyboard.UP]){
trace(obj.y - 100);
}
}
查阅资料后发现,KeyboardEvent的Sender是InteractiveObject,也就是可以是Sprite,MovieClip,Stage,Loader,TextField类。但是如果Sender不是Stage的时候,需要注意一个焦点的问题。也就是需要加入以下一句:
stage.focus = my_sprite;
不过这里,我使用了Stage作为Sender。但是一直无法响应KEY_UP, KEY_DOWN事件,但是在测试的时候,我注意到了,当我按下按键时,后面的工具菜单会变化,那是否意味着,测试播放器响应了快捷键呢?
在播放器的控制菜单,真的发现有一项是“禁用快捷键”。如果大家的flash需要用到KeyboardEvent的时候,记得勾选“禁用快捷键”。这样swf就能响应键盘事件了。