在AS3中,键盘事件是由KeyboardEvent类来处理的,属于flash.events包里面,有两种类型的键盘事件:KeyboardEvent.KEY_DOWN 和 KeyboardEvent.KEY_UP,对于键的代码获得我们通过keyCode这个属性
其实键盘事件使用起来还是相当方便,下面直接看实例:
建立一个新的AS文件main.as,输入下面代码:
package {
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.events.MouseEvent;
public class main extends Sprite {
private function keyEvt(event:KeyboardEvent):void {
trace(event.keyCode);
switch (event.keyCode) {
case Keyboard.UP :
event.target.y-=10;
break;
case Keyboard.DOWN :
event.target.y+=10;
break;
case Keyboard.LEFT :
event.target.x-=10;
break;
case Keyboard.RIGHT :
event.target.x+=10;
break;
default :
break;
}
}
public function main():void {
var sp:Sprite=new Sprite();
sp.graphics.beginFill(0x0000ff);
sp.graphics.drawRect(200,200,100,100);
sp.graphics.endFill();
addChild(sp);
sp.buttonMode=true;
sp.addEventListener(KeyboardEvent.KEY_DOWN,keyEvt);
}
}
}
以上代码主要功能为绘制一个矩形,然后通过键盘的方向键控制其运动。关于如何将这文档类运用到FLA文件中去,我这就不啰嗦了。值得注意的是,我这里的sp为一个sprite类型的实例,它的buttonMode也设为了True,因此我们在运行的时候首先先让这个实例获得焦点,然后才可以按下方向键控制其运动,如果我们不将buttonMode设为true的话,即使我们鼠标点击后都不可以让其进行运行,除非我们通过stage.focus=sp来指定当前焦点对象。但是这在实例周围会有一个焦点的框框,而且鼠标一旦点击后将会失去焦点,后就再也无法通过键盘进行移动。或许说得有点啰嗦,但大家试一试就可以发觉。我一直想找一个去掉这高亮显示的框框,可惜一直未找到有效的方法,大家如果有好的请告诉我。
在键盘事件中除了keyCode还有一个属性比较实用,就是keyLocation,这个是确定此键再键盘上的位置,特别是在shift、ctrl、alt上面,由于有左右两边,应该此属性可以告诉你你当前按下的是左边的还是右边的。
去掉焦点边框后并单击重新获得焦点代码示例:09-2-28补
package {
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.events.MouseEvent;
public class main3 extends Sprite {
private function keyEvt(event:KeyboardEvent):void {
trace(event.keyCode+"|"+event.keyLocation);
switch (event.keyCode) {
case Keyboard.UP :
event.target.y-=10;
break;
case Keyboard.DOWN :
event.target.y+=10;
break;
case Keyboard.LEFT :
event.target.x-=10;
break;
case Keyboard.RIGHT :
event.target.x+=10;
break;
default :
break;
}
}
private function clickFun(evt:MouseEvent):void
{
stage.focus=Sprite(evt.target);
}
public function main3():void {
var sp:Sprite=new Sprite();
sp.graphics.beginFill(0x0000ff);
sp.graphics.drawRect(200,200,100,100);
sp.graphics.endFill();
addChild(sp);
stage.stageFocusRect=false;
stage.focus=sp;
sp.addEventListener(KeyboardEvent.KEY_DOWN,keyEvt);
sp.addEventListener(MouseEvent.CLICK,clickFun);
}
}
}