zoukankan      html  css  js  c++  java
  • 屏幕震动效果

    package tools {
        import flash.display.DisplayObject;
        import flash.events.TimerEvent;
        import flash.utils.Timer;    
    
        public class Earthquake {
           /**
            * 参数
            */
            private var _timer:Timer;
            private var _displayObject:DisplayObject;
            private var _originalX:int;
            private var _originalY:int;
            private var _intensity:int;
            private var _intensityOffset:int;
    		/**
    		 * 时间
    		 */
    		private var _seconds:Number;
    		/**
    		 * 方向
    		 */
    		public static const LEFT_RIGHT_UP_DOWN:int = 0;
    		public static const LEFT_RIGHT:int = 1;
    		public static const UP_DOWN:int = 2;
    		/**
    		 * 帧频
    		 */
    		public static const FRAME_RATE:int = 60;
    		/**
    		 * 方向
    		 */
    		private var _direction:int;
    		/**
    		 * 震动中
    		 */
    		private var _bShaking:Boolean = false;
    		/**
    		 * 是否自动销毁
    		 */
    		private var _bDestroy:Boolean = false;
    		
    		 /**
    		  * 对一个显示对象应用地震效果。
    		  * @param	displayObject 抖动对象
    		  * @param	intensity 强度
    		  * @param	seconds 持续时间 秒
    		  * @param	direction 方向
    		  * @param	autoDestroy 自动销毁
    		  */
    		public function Earthquake(displayObject:DisplayObject, intensity:Number = 10, seconds:Number = 1, direction:int = 0, autoDestroy:Boolean = false):void
    		{
                _displayObject = displayObject;
                _originalX = displayObject.x;
                _originalY = displayObject.y;
    			_intensity = intensity;
                _intensityOffset = intensity / 2;
    			_seconds = seconds;
    			_direction = direction;
    			_bDestroy = autoDestroy;
    		}
    		/**
    		 * 开始后抖动
    		 */
    		public function go():void
    		{
    			if (_bShaking) return;
    			_bShaking = true;
    			var msPerUpdate:int = int(1000 / FRAME_RATE);
                var totalUpdates:int = int(_seconds * 1000 / msPerUpdate);
    			
    			if (!_timer)
    			{
    				_timer = new Timer(msPerUpdate, totalUpdates);
    				_timer.addEventListener(TimerEvent.TIMER, quake);
    				_timer.addEventListener(TimerEvent.TIMER_COMPLETE, resetImage);
    			}
    			else
    			{
    				_displayObject.x = _originalX;
    				_displayObject.y = _originalY;
    				_timer.reset();
    			}
                _timer.start();
    		}
    		/**
    		 * 抖动
    		 * @param	event
    		 */
            private function quake( event:TimerEvent ):void 
    		{
    			var newX:int = _originalX;
    			var newY:int = _originalY;
    			
    			switch(_direction)
    			{
    				case LEFT_RIGHT_UP_DOWN:
    					newX = _originalX + Math.random() * _intensity - _intensityOffset;
    					newY = _originalY + Math.random() * _intensity - _intensityOffset;
    					break;
    				case LEFT_RIGHT:
    					newX = _originalX + Math.random() * _intensity - _intensityOffset;
    					break;
    				case UP_DOWN:
    					newY = _originalY + Math.random() * _intensity - _intensityOffset;
    					break;
    			}
                _displayObject.x = newX;
                _displayObject.y = newY;
            }
    		/**
    		 * 重置
    		 * @param	event
    		 */
            private function resetImage( event:TimerEvent = null ):void
    		{
                _displayObject.x = _originalX;
                _displayObject.y = _originalY;
                cleanup();
            }
    		/**
    		 * 清除
    		 */
            private function cleanup():void 
    		{
    			_bShaking = false;
                /*_timer = null;
    			_timer.stop();*/
    			_timer.reset();
    			if (_bDestroy)
    			{
    				_timer.removeEventListener(TimerEvent.TIMER, quake);
    				_timer.removeEventListener(TimerEvent.TIMER_COMPLETE, resetImage);
    				_timer = null;
    				_displayObject = null;
    			}
    			delete [this];
                //_displayObject = null;
            }
        }
    }
    
  • 相关阅读:
    替换指定串函数
    实现超级链接
    面向对象的关系数据库设计
    SQL语句的添加、删除、修改多种方法
    InfoWorld2008最佳开源软件大奖
    判断字符是否是汉字
    delphi指针
    项目经理要“三心二意”
    Linq查询Specified cast is not valid异常的常见原因
    SQL SERVER数据库同步示例
  • 原文地址:https://www.cnblogs.com/602147629/p/3553019.html
Copyright © 2011-2022 走看看