首页 > 【as3】键盘事件

【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);

        }

    }

}

转载于:https://www.cnblogs.com/YY-1028/archive/2012/04/28/2475485.html

更多相关: