教程目录
1 演示效果
2 实现原理
3 Demo
1 演示效果
主要参考9ria帖子,年代久远,忘了。
另可参考 jquery+css3实现元素颤抖特效
PC演示地址
手机扫码:
2 实现原理
定时器,每隔一段时间改变震动对象的x,y。 可追加rotation和alpha。
使用方法
[C#] 纯文本查看 复制代码
|
1
2
|
震动目标obj,1秒内震动10次,震动最大距离10ShakeTool.getInstance().shakeObj(obj, 1, 10, 10); |
工具源码
[C#] 纯文本查看 复制代码
|
01
02
03
04
05
06
07
08
09
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
|
/** * 震动工具 * @author chenkai * [url=home.php?mod=space&uid=81950]@since[/url] 2017/5/24 * * Example: * 震动目标obj,1秒内震动10次,震动最大距离10 * ShakeTool.getInstance().shakeObj(obj, 1, 10, 10); */class ShakeTool { private static instance:ShakeTool; //单例 private initX:number; //初始位置 private initY: number; private target:egret.DisplayObject; //震动目标 private maxDis: number; //震动距离 private count: number = 0; //计时器次数 private rate: number; //一秒震动次数 private timer:egret.Timer = new egret.Timer(1000); public static getInstance():ShakeTool{ if(this.instance == null){ this.instance = new ShakeTool(); } return this.instance; } /** * 震动显示对象 * @param target 震动目标对象 * @param time 震动持续时长(秒) * @param rate 震动频率(一秒震动多少次) * @param maxDis 震动最大距离 */ public shakeObj(target: egret.DisplayObject,time: number,rate: number,maxDis: number): void { this.target = target; this.initX = target.x; this.initY = target.y; this.maxDis = maxDis; this.count = time * rate; this.rate = rate; this.timer.delay = 1000/rate; this.timer.repeatCount = this.count; this.timer.addEventListener(egret.TimerEvent.TIMER,this.shaking, this); this.timer.addEventListener(egret.TimerEvent.TIMER_COMPLETE, this.shakeComplete, this); this.timer.reset(); this.timer.start(); } private shaking(): void { egret.Tween.removeTweens(this.target); this.target.x = this.initX - this.maxDis + Math.random()*this.maxDis*2; this.target.y = this.initY - this.maxDis + Math.random()*this.maxDis*2; egret.Tween.get(this.target).to({x:this.initX, y:this.initY},999/this.rate); } private shakeComplete(): void { if(this.target){ egret.Tween.removeTweens(this.target); this.target.x = this.initX; this.target.y = this.initY; } this.timer.removeEventListener(egret.TimerEvent.TIMER,this.shaking,this); this.timer.removeEventListener(egret.TimerEvent.TIMER_COMPLETE,this.shakeComplete,this); } /**停止震动 */ public stop(){ this.shakeComplete(); }} |