·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[as3]as3实现屏幕切换震动的效果 as3屏幕

时间:2016-07-25 10:15酷播
[as3]as3实现屏幕切换震动的效果 as3屏幕

[as3]as3实现屏幕切换震动的效果 as3屏幕

  1. package tools { 
  2.     import flash.display.DisplayObject; 
  3.     import flash.events.TimerEvent; 
  4.     import flash.utils.Timer;    
  5.   
  6.     public class Earthquake { 
  7.        /** 
  8.         * 参数 
  9.         */ 
  10.         private var _timer:Timer; 
  11.         private var _displayObject:DisplayObject; 
  12.         private var _originalX:int; 
  13.         private var _originalY:int; 
  14.         private var _intensity:int; 
  15.         private var _intensityOffset:int; 
  16.         /** 
  17.          * 时间 
  18.          */ 
  19.         private var _seconds:Number; 
  20.         /** 
  21.          * 方向 
  22.          */ 
  23.         public static const LEFT_RIGHT_UP_DOWN:int = 0
  24.         public static const LEFT_RIGHT:int = 1
  25.         public static const UP_DOWN:int = 2
  26.         /** 
  27.          * 帧频 
  28.          */ 
  29.         public static const FRAME_RATE:int = 60
  30.         /** 
  31.          * 方向 
  32.          */ 
  33.         private var _direction:int; 
  34.         /** 
  35.          * 震动中 
  36.          */ 
  37.         private var _bShaking:Boolean = false
  38.         /** 
  39.          * 是否自动销毁 
  40.          */ 
  41.         private var _bDestroy:Boolean = false
  42.           
  43.          /** 
  44.           * 对一个显示对象应用地震效果。 
  45.           * @param  displayObject 抖动对象 
  46.           * @param  intensity 强度 
  47.           * @param  seconds 持续时间 秒 
  48.           * @param  direction 方向 
  49.           * @param  autoDestroy 自动销毁 
  50.           */ 
  51.         public function Earthquake(displayObject:DisplayObject, intensity:Number = 10seconds:Number = 1direction:int = 0autoDestroy:Boolean = false):void 
  52.         { 
  53.             _displayObject = displayObject; 
  54.             _originalX = displayObject.x; 
  55.             _originalY = displayObject.y; 
  56.             _intensity = intensity; 
  57.             _intensityOffset = intensity / 2; 
  58.             _seconds = seconds; 
  59.             _direction = direction; 
  60.             _bDestroy = autoDestroy
  61.         } 
  62.         /** 
  63.          * 开始后抖动 
  64.          */ 
  65.         public function go():void 
  66.         { 
  67.             if (_bShaking) return; 
  68.             _bShaking = true
  69.             var msPerUpdate:int = int(1000 / FRAME_RATE); 
  70.             var totalUpdates:int = int(_seconds * 1000 / msPerUpdate); 
  71.               
  72.             if (!_timer) 
  73.             { 
  74.                 _timer = new Timer(msPerUpdate, totalUpdates); 
  75.                 _timer.addEventListener(TimerEvent.TIMER, quake); 
  76.                 _timer.addEventListener(TimerEvent.TIMER_COMPLETE, resetImage); 
  77.             } 
  78.             else 
  79.             { 
  80.                 _displayObject.x = _originalX
  81.                 _displayObject.y = _originalY
  82.                 _timer.reset(); 
  83.             } 
  84.             _timer.start(); 
  85.         } 
  86.         /** 
  87.          * 抖动 
  88.          * @param   event 
  89.          */ 
  90.         private function quake( event:TimerEvent ):void 
  91.         { 
  92.             var newX:int = _originalX
  93.             var newY:int = _originalY
  94.               
  95.             switch(_direction) 
  96.             { 
  97.                 case LEFT_RIGHT_UP_DOWN: 
  98.                     newX = _originalX + Math.random() * _intensity - _intensityOffset; 
  99.                     newY = _originalY + Math.random() * _intensity - _intensityOffset; 
  100.                     break; 
  101.                 case LEFT_RIGHT: 
  102.                     newX = _originalX + Math.random() * _intensity - _intensityOffset; 
  103.                     break; 
  104.                 case UP_DOWN: 
  105.                     newY = _originalY + Math.random() * _intensity - _intensityOffset; 
  106.                     break; 
  107.             } 
  108.             _displayObject.x = newX
  109.             _displayObject.y = newY
  110.         } 
  111.         /** 
  112.          * 重置 
  113.          * @param   event 
  114.          */ 
  115.         private function resetImage( event:TimerEvent = null ):void 
  116.         { 
  117.             _displayObject.x = _originalX
  118.             _displayObject.y = _originalY
  119.             cleanup(); 
  120.         } 
  121.         /** 
  122.          * 清除 
  123.          */ 
  124.         private function cleanup():void 
  125.         { 
  126.             _bShaking = false
  127.             /*_timer = null
  128.             _timer.stop();*/ 
  129.             _timer.reset(); 
  130.             if (_bDestroy) 
  131.             { 
  132.                 _timer.removeEventListener(TimerEvent.TIMER, quake); 
  133.                 _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, resetImage); 
  134.                 _timer = null
  135.                 _displayObject = null
  136.             } 
  137.             delete [this]; 
  138.             //_displayObject = null
  139.         } 
  140.     } 

[as3]as3实现屏幕切换震动的效果 as3屏幕

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器