当前位置: 老葡京网站娱乐 > 图形设计 > FLASH教程 > 正文

积少成多Flash(7) - ActionScript 3.0交互之鼠标事件和键盘事件

时间:2011-03-21 webabcd

老葡京网站娱乐 www.sdguanhua.com 介绍

演示使用 Flash ActionScript 3.0 来监听用户的键盘事件和鼠标事件,并对 其作相应的处理

键盘事件 - 在 flash.events.KeyboardEvent 类下。只有两个事件类型 KeyboardEvent.KEY_DOWN 和 KeyboardEvent.KEY_UP 。

鼠标事件 - 在 flash.events.MouseEvent 类下。常用的事件类型有 MouseEvent.MOUSE_DOWN, MouseEvent.DOUBLE_CLICK, MouseEvent.MOUSE_UP, MouseEvent.MOUSE_OVER, MouseEvent.MOUSE_MOVE 和 MouseEvent.MOUSE_OUT 等 。

1、处理键盘事件

做 4 个只有两帧的 MovieClip 并放到 UI 上,分别用于提示上/下/左/右键 的按键情况,默认情况下显示第一帧,当用户按下了对应的键时则显示第二帧。 这 4 个 MovieClip 的名称分别为 btnUp, btnDown, btnLeft, btnRight

再在 UI 上画一个物体,由于显示用户的键盘事件(上/下/左/右)所产生的 结果

Main.as

package
{
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.display.MovieClip;
    import flash.ui.Keyboard;
    import flash.events.MouseEvent;

    public class Main extends MovieClip
    {
        // 保存用户是否按下了上/下/左/右键
        public var isUp:Boolean = false;
        public var isDown:Boolean = false;
        public var isLeft:Boolean = false;
        public var isRight:Boolean = false;

        // 每次 ENTER_FRAME 物体所需移动的距离
        public var step:Number = 5;

        public function Main()
        {
            // 设置四个用于显示方向的 MovieClip 的初始状态 为停在第一帧
            btnUp.stop();
            btnDown.stop();
            btnLeft.stop();
            btnRight.stop();

            // 处理按键的按下、放开事件(在舞台上侦测该事 件)
            stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressHandler);
            stage.addEventListener(KeyboardEvent.KEY_UP, keyReleaseHandler);
            // 用于响应按键事件的 ENTER_FRAME
            this.addEventListener(Event.ENTER_FRAME, enterFrameHandlerForKeyboard);
        }

        protected function keyPressHandler (event:KeyboardEvent):void
        {
            // 检测用户按下的键
            switch (event.keyCode)
            {
                case Keyboard.UP:
                    isUp = true;
                    btnUp.gotoAndStop(2);
                    block.rotation = 0;
                    break;

                case Keyboard.DOWN: // 按的是“下”键
                    isDown = true; // 保存用户的按 键信息。即用户正在按“下”键
                    btnDown.gotoAndStop(2); // 用 于显示方向“下”的 MovieClip 停到第二帧
                    block.rotation = 180; // 物体 旋转 180 度
                    break;

                case Keyboard.LEFT:
                    isLeft = true;
                    btnLeft.gotoAndStop(2);
                    block.rotation = 270;
                    break;

                case Keyboard.RIGHT:
                    isRight = true;
                    btnRight.gotoAndStop(2);
                    block.rotation = 90;
                    break;
            }
        }

        protected function keyReleaseHandler (event:KeyboardEvent):void
        {
            // 检测用户放开的键
            switch( event.keyCode )
            {
                case Keyboard.UP: // 按的是“上”键
                    isUp = false; // 保存用户的按 键信息。即用户已经不再按“上”键了
                    btnUp.gotoAndStop(1); // 用于 显示方向“上”的 MovieClip 停到第一帧
                    break;

                case Keyboard.DOWN:
                    isDown = false;
                    btnDown.gotoAndStop(1);
                    break;

                case Keyboard.LEFT:
                    isLeft = false;
                    btnLeft.gotoAndStop(1);
                    break;

                case Keyboard.RIGHT:
                    isRight = false;
                    btnRight.gotoAndStop(1);
                    break;
            }
        }

        protected function enterFrameHandlerForKeyboard (event:Event):void
        {
            // 根据用户的按键情况。将物体向上/下/左/右移动 指定的距离
            if (isLeft)
            {
                block.x -= step;
            }
            if (isRight)
            {
                block.x += step;
            }
            if (isUp)
            {
                block.y -= step;
            }
            if (isDown)
            {
                block.y += step;
            }
        }
    }
}