55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
|
const { ccclass } = cc._decorator;
|
|||
|
|
|||
|
@ccclass
|
|||
|
export default class Shake extends cc.ActionInterval {
|
|||
|
private _init: boolean = false;
|
|||
|
private _initial_x: number = 0;
|
|||
|
private _initial_y: number = 0;
|
|||
|
private _strength_x: number = 0;
|
|||
|
private _strength_y: number = 0;
|
|||
|
|
|||
|
/**
|
|||
|
* 建立抖動動畫
|
|||
|
* @param {number} duration 動畫持續時長
|
|||
|
* @param {number} strength_x 抖動幅度: x方向
|
|||
|
* @param {number} strength_y 抖動幅度: y方向
|
|||
|
* @returns {Shake}
|
|||
|
*/
|
|||
|
public static create(duration: number, strength_x: number, strength_y: number): Shake {
|
|||
|
let act: Shake = new Shake();
|
|||
|
act.initWithDuration(duration, strength_x, strength_y);
|
|||
|
return act;
|
|||
|
}
|
|||
|
|
|||
|
public initWithDuration(duration: number, strength_x: number, strength_y: number): boolean {
|
|||
|
cc.ActionInterval.prototype['initWithDuration'].apply(this, arguments);
|
|||
|
this._strength_x = strength_x;
|
|||
|
this._strength_y = strength_y;
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
public fgRangeRand(min: number, max: number): number {
|
|||
|
let rnd: number = Math.random();
|
|||
|
return rnd * (max - min) + min;
|
|||
|
}
|
|||
|
|
|||
|
public update(time: number): void {
|
|||
|
let randx = this.fgRangeRand(-this._strength_x, this._strength_x);
|
|||
|
let randy = this.fgRangeRand(-this._strength_y, this._strength_y);
|
|||
|
this.getTarget()?.setPosition(randx + this._initial_x, randy + this._initial_y);
|
|||
|
}
|
|||
|
|
|||
|
public startWithTarget(target: cc.Node): void {
|
|||
|
cc.ActionInterval.prototype['startWithTarget'].apply(this, arguments);
|
|||
|
if (!this._init) {
|
|||
|
this._init = true;
|
|||
|
this._initial_x = target.x;
|
|||
|
this._initial_y = target.y;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public stop(): void {
|
|||
|
this.getTarget()?.setPosition(new cc.Vec2(this._initial_x, this._initial_y));
|
|||
|
cc.ActionInterval.prototype['stop'].apply(this);
|
|||
|
}
|
|||
|
}
|