| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- const { ccclass, property, executeInEditMode, playOnFocus } = cc._decorator;
- /**
- * 绳索摆动效果
- * @author 薛鸿潇
- */
- @ccclass
- @executeInEditMode()
- @playOnFocus()
- export default class RopeSwung extends cc.Component {
- @property({ displayName: '摆动角度' })
- private angle: number = 15;
- @property({ displayName: '摆动时间', tooltip: '摆动1/4距离消耗的时间' })
- private time: number = 1;
- /** 编辑器预览 */
- private _edit_play: boolean = false;
- @property({ displayName: '编辑器预览' })
- get edit_play(): boolean {
- if (this._edit_play && !this.edit_playing) this.initShakeSlow();
- this.edit_playing = this._edit_play;
- return this._edit_play;
- }
- set edit_play(v: boolean) {
- this._edit_play = v;
- if (!v) this.stop();
- }
- /** 编辑器是否正在播放 */
- private edit_playing = false;
- onLoad() {
- }
- start() {
- if (CC_EDITOR) {
- if (this.edit_play) {
- this.initShakeSlow();
- }
- } else {
- this.initShakeSlow();
- }
- }
- /**
- * 缓慢摇动
- * @param node 动画节点
- */
- private initShakeSlow() {
- let node = this.node;
- let rotate1 = cc.tween().to(this.time, { angle: { value: this.angle, easing: 'sineOut' } });
- let rotate2 = cc.tween().to(this.time, { angle: { value: 0, easing: 'sineIn' } });
- let rotate3 = cc.tween().to(this.time, { angle: { value: -this.angle, easing: 'sineOut' } });
- let rotate4 = cc.tween().to(this.time, { angle: { value: 0, easing: 'sineIn' } });
- let sequence1 = cc.tween().sequence(rotate1, rotate2, rotate3, rotate4);
- cc.tween(node).then(sequence1).repeatForever().start();
- }
- /** 停止动画 */
- private stop() {
- this.node.stopAllActions();
- }
- }
|