关于Actionscript 3.0中KeyboardEvent的调试需注意的问题
今天在做一个节拍游戏,在加入了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就能响应键盘事件了。