| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- const { ccclass, property, executeInEditMode, playOnFocus } = cc._decorator;
- /**
- * Z字飘落效果
- * @author 薛鸿潇
- */
- @ccclass
- @executeInEditMode()
- @playOnFocus()
- export default class ZPathFalling extends cc.Component {
- @property({ displayName: '自动播放' }) private play_on_load: boolean = true;
- @property({ displayName: '完成回调', type: cc.Component.EventHandler }) public onComplete: cc.Component.EventHandler = new cc.Component.EventHandler();
- /** 编辑器预览 */
- private _edit_play: boolean = false;
- @property({ displayName: '编辑器预览' })
- get edit_play(): boolean {
- if (this._edit_play && !this.edit_playing) {
- this.edit_playing = true;
- this.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) {
- this.edit_play && this.play();
- } else {
- this.play_on_load && this.play();
- }
- }
- /** z字落地术 */
- private play() {
- // z字三点式
- let end_pos1 = this.node.getPosition();
- let end_pos2 = this.node.getPosition();
- let end_pos3 = this.node.getPosition();
- // 左右坐标
- if (this.node.x >= 0) {
- // 在右边,左飘
- end_pos1.x -= this.node.width * 3;
- end_pos2.x -= this.node.width * 1;
- end_pos3.x -= this.node.width * 2;
- } else {
- // 在左边,右飘
- end_pos1.x += this.node.width * 3;
- end_pos2.x += this.node.width * 1;
- end_pos3.x += this.node.width * 2;
- }
- // 下落
- end_pos1.y -= this.node.height / 2;
- end_pos2.y -= this.node.height;
- end_pos3.y -= this.node.height * 1.2;
- // // 上下坐标
- // if (this.node.y <= -200) {
- // // 在下面
- // end_pos1.y += this.node.height / 1;
- // end_pos2.y += this.node.height * 1.5;
- // end_pos3.y += this.node.height * 2;
- // } else {
- // // 在上面
- // end_pos1.y -= this.node.height / 2;
- // end_pos2.y -= this.node.height;
- // end_pos3.y -= this.node.height * 1.2;
- // }
- let pos1 = cc.tween().to(0.5, { position: end_pos1 }, { easing: 'cubicOut' })
- let pos2 = cc.tween().to(0.5, { position: end_pos2 }, { easing: 'cubicOut' })
- let pos3 = cc.tween().to(0.5, { position: end_pos3 }, { easing: 'cubicOut' })
- let call1 = cc.tween().call(() => {
- this.edit_playing = false;
- this.edit_play = false;
- this.onComplete.handler && this.onComplete.emit([this.node]);
- })
- cc.tween(this.node).then(pos1).then(pos2).then(pos3).then(call1).start();
- }
- /** 停止动画 */
- private stop() {
- this.edit_playing = false;
- this.node.stopAllActions();
- }
- // update (dt) {}
- }
|