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