[add] Engine
This commit is contained in:
55
assets/Script/Engine/Utils/Act/Shake.ts
Normal file
55
assets/Script/Engine/Utils/Act/Shake.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
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);
|
||||
}
|
||||
}
|
10
assets/Script/Engine/Utils/Act/Shake.ts.meta
Normal file
10
assets/Script/Engine/Utils/Act/Shake.ts.meta
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"ver": "1.1.0",
|
||||
"uuid": "c5872cc0-91a4-49cb-a055-e037accd801d",
|
||||
"importer": "typescript",
|
||||
"isPlugin": false,
|
||||
"loadPluginInWeb": true,
|
||||
"loadPluginInNative": true,
|
||||
"loadPluginInEditor": false,
|
||||
"subMetas": {}
|
||||
}
|
Reference in New Issue
Block a user