首页 > 其他 > 详细

屏幕震动效果

时间:2014-02-18 09:27:42      阅读:425      评论:0      收藏:0      [点我收藏+]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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;
        }
    }
}

屏幕震动效果

原文:http://www.cnblogs.com/602147629/p/3553019.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!