• Flex研究——显示对象平滑移动


    用flex开发互动应用的时候经常会遇到显示对象与键盘鼠标的互动响应,通常的做法是添加侦听器来检测输入事件:

    Java代码 复制代码
    1. package {   
    2.     import flash.display.Sprite;   
    3.     import flash.events.KeyboardEvent;   
    4.     import flash.ui.Keyboard;      
    5.        
    6.     public class FlexTest extends Sprite   
    7.     {   
    8.   
    9.         private var circle_sprite:Sprite;   
    10.         private var isUp:Boolean;   
    11.         private var isDown:Boolean;   
    12.         private var isLeft:Boolean;   
    13.         private var isRight:Boolean;   
    14.         private const  MOVE_SPEED:int=2;   
    15.         public function FlexTest()   
    16.         {   
    17.            circle_sprite=new Sprite();   
    18.            circle_sprite.graphics.beginFill(0xff0000);   
    19.                circle_sprite.graphics.drawCircle(100,100,20);   
    20.                circle_sprite.graphics.endFill();   
    21.            addChild(circle_sprite);   
    22.            stage.addEventListener(KeyboardEvent.KEY_DOWN,key_down);   
    23.         }   
    24.            
    25.         private function key_down(evt:KeyboardEvent):void{   
    26.             if (evt.keyCode==Keyboard.LEFT){   
    27.               circle_sprite.x-=MOVE_SPEED;   
    28.             }   
    29.             if (evt.keyCode==Keyboard.RIGHT){   
    30.               circle_sprite.x+=MOVE_SPEED;   
    31.             }   
    32.             if (evt.keyCode==Keyboard.UP){   
    33.               circle_sprite.y-=MOVE_SPEED;   
    34.             }   
    35.             if (evt.keyCode==Keyboard.DOWN){   
    36.               circle_sprite.y+=MOVE_SPEED;   
    37.             }   
    38.         }   
    39.   
    40.     }   
    41.        
    42. }  


    以上实现,在使用过程中用方向键控制MC移动的时候为没有那么流畅,MC的移动明显有点卡,这是因为键盘按键如果一直按住不放,它也是间隔开来不断的重复触发按键事件,键盘的键值扫描有一定的间隔频率,因此产生了断断续续的感觉。

    要想得到平滑的移动效果,可以通过添加事件侦听器侦听Event.ENTER_FRAME事件来解决

    Java代码 复制代码
    1. package {   
    2. import flash.display.Sprite;   
    3. import flash.events.Event;   
    4. import flash.events.KeyboardEvent;   
    5. import flash.ui.Keyboard;      
    6.   
    7. public class FlexTest extends Sprite   
    8. {   
    9.   
    10.     private var circle_sprite:Sprite;   
    11.     private var isUp:Boolean;   
    12.     private var isDown:Boolean;   
    13.     private var isLeft:Boolean;   
    14.     private var isRight:Boolean;   
    15.     private const  MOVE_SPEED:int=2;   
    16.     public function FlexTest()   
    17.     {   
    18.        circle_sprite=new Sprite();   
    19.        circle_sprite.graphics.beginFill(0x0080c0);   
    20.          circle_sprite.graphics.drawCircle(100,100,20);   
    21.          circle_sprite.graphics.endFill();   
    22.        addChild(circle_sprite);   
    23.        stage.addEventListener(KeyboardEvent.KEY_DOWN,key_down);   
    24.        stage.addEventListener(KeyboardEvent.KEY_UP,key_up);   
    25.        stage.addEventListener(Event.ENTER_FRAME,enter_frame);   
    26.     }   
    27.        
    28.     private function key_down(event:KeyboardEvent):void {   
    29.        
    30.                     if(event.keyCode==Keyboard.UP){   
    31.                             isUp=true;   
    32.                             }   
    33.                     if (event.keyCode==Keyboard.DOWN) {   
    34.                             isDown=true;   
    35.                             }   
    36.                     if(event.keyCode==Keyboard.LEFT){   
    37.                             isLeft=true;   
    38.                             }   
    39.                     if(event.keyCode==Keyboard.RIGHT){   
    40.                             isRight=true;   
    41.                             }   
    42.                       
    43.     }   
    44.     private function key_up(event:KeyboardEvent):void{   
    45.                     if(event.keyCode==Keyboard.UP){   
    46.                             isUp=false;   
    47.                             }   
    48.                     if (event.keyCode==Keyboard.DOWN) {   
    49.                             isDown=false;   
    50.                             }   
    51.                     if(event.keyCode==Keyboard.LEFT){   
    52.                             isLeft=false;   
    53.                             }   
    54.                     if(event.keyCode==Keyboard.RIGHT){   
    55.                             isRight=false;   
    56.                                 }   
    57.                           
    58.                 }   
    59.                    
    60.     public function enter_frame(event:Event):void{   
    61.     
    62.                     if(isUp){   
    63.                             circle_sprite.y-=MOVE_SPEED;   
    64.                     }   
    65.                     if(isRight){   
    66.                     circle_sprite.x+=MOVE_SPEED;   
    67.                     }   
    68.                     if(isDown){   
    69.                             circle_sprite.y+=MOVE_SPEED;   
    70.                     }   
    71.                     if(isLeft){   
    72.                             circle_sprite.x-=MOVE_SPEED;   
    73.                     }   
    74.             }                      
    75.   
    76. }   
    77.   
    78. }  
    • swf.rar (2.4 KB)
    • 描述: 效果对比
    • 下载次数: 36
  • 相关阅读:
    Android:简单联网获取网页代码
    nginx搭建前端项目web服务器以及利用反向代理调试远程后台接口
    ElementUI使用问题记录:设置路由+iconfont图标+自定义表单验证
    vue中引入第三方字体图标库iconfont,及iconfont引入彩色图标
    Axios使用文档总结
    使用node中的express解决vue-cli加载不到dev-server.js的问题
    Vue脚手架(vue-cli)搭建和目录结构详解
    JS夯实基础:Javascript 变态题解析 (下)
    理解JS里的稀疏数组与密集数组
    JS夯实基础:Javascript 变态题解析 (上)
  • 原文地址:https://www.cnblogs.com/chinatefl/p/1229615.html
Copyright © 2020-2023  润新知