在舞台上先做个名叫MC的影片剪辑元件 import flash.events.KeyboardEvent; import flash.events.Event;
//定义4个常量,分别表示键盘A、D、W、S const KEY_A:uint=65; const KEY_D:uint=68; const KEY_S:uint=83; const KEY_W:uint=87; //创建和引用对象 var key:Object =new Object; //定义运动的速度 var speed:Number =2; //注册键盘按下事件侦听器 stage.addEventListener (KeyboardEvent.KEY_DOWN,keyDown); //注册键盘释放事件侦听器 stage.addEventListener (KeyboardEvent.KEY_UP,keyUp); //注册enterFrame事件侦听器 this.addEventListener (Event.ENTER_FRAME,test); //当键盘按下时,动态创建键控代码为属性名,true为值的属性 function keyDown(e:KeyboardEvent):void { key[e.keyCode]=true; } //当键盘释放时,根据属性名,删除属性 function keyUp(e:KeyboardEvent):void { delete key[e.keyCode]; } //enterFrame事件侦听器 function test(e:Event):void { //如果按下A键 if(key[KEY_A]) { mc.x-=speed; } //如果按下D键 if(key[KEY_D]) { mc.x+=speed; } //如果按下W键 if(key[KEY_W]) { mc.y-=speed; } //如果按下S键 if(key[KEY_S]) { mc.y+=speed; } }
测试影片,分别按单键和组合键,查看效果。 把按下的键保存在一个对象的属性中,只要按键不松开,属性就为true,即键盘按下时 属性为true,直到键盘释放时属性为false,而enterFrame事件不断的检测这个属性 值,如果true,就执行条件语句的代码,所以消除了停滞现象。 把按键信息保存在对象的属性,如果同时按下两个键不松开,对象就有了两个保存这 两个键的属性,在enterFrame事件侦听器中,可以同时判断两个键是否被按下,因此 就有了组合键效果