【as3】键盘事件

在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);
        }
    }
}

posted on 2012-04-28 17:26  haida  阅读(2379)  评论(0编辑  收藏  举报

导航