关于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就能响应键盘事件了。

posted @ 2011-09-11 16:08  Enix  阅读(1115)  评论(0编辑  收藏  举报