薛鸿潇 5 лет назад
Родитель
Сommit
7e859a6b76

+ 6 - 2
mk_framework/assets/script/game/component/tween/FrameAnimation.ts

@@ -26,7 +26,7 @@ export default class FrameAnimation extends cc.Component {
     @property({ displayName: "自动销毁", tooltip: '播完自动销毁' }) private autoDestroy: boolean = false;
     @property({ displayName: "每帧回调", type: cc.Component.EventHandler }) onFrameCall: cc.Component.EventHandler = new cc.Component.EventHandler();
     @property({ displayName: "结束回调", type: cc.Component.EventHandler }) onCompleteCall: cc.Component.EventHandler = new cc.Component.EventHandler();
-    /** 编辑器预览 bug待修复*/
+    /** 编辑器预览 */
     private _edit_play: boolean = false;
     @property({ displayName: '编辑器预览' })
     get edit_play(): boolean {
@@ -72,12 +72,16 @@ export default class FrameAnimation extends cc.Component {
         if (this.images.length != 0) {
             this.frameNum = this.images.length;
         }
-        this.running = this.autoPlayOnLoad;
 
         if (this.reverse) {
             this.frameIndex = this.frameNum - 1;
             this.nextFrameIndex = this.frameNum - 1;
         }
+        if (CC_EDITOR) {
+            this.running = this.edit_playing;
+        } else {
+            this.running = this.autoPlayOnLoad;
+        }
 
     }
     /**

+ 37 - 33
mk_framework/assets/script/game/component/tween/UITween.ts

@@ -16,18 +16,11 @@ export class PropsData {
 }
 /**
  * 缓动数据
- * @author 
  */
-@ccclass//("TweenData")
+@ccclass("TweenData")
 export class TweenData {
-    // @property({ tooltip: "属性数据", type: PropsData })
-    // public propsData: PropsData = new PropsData();
-    @property({ tooltip: "坐标" })
-    public position: cc.Vec2 = cc.Vec2.ZERO;
-    @property({ tooltip: "旋转" })
-    public angle: number = 0;
-    @property({ tooltip: "缩放" })
-    public scale: number = 1;
+    @property({ tooltip: "属性数据", type: PropsData })
+    public propsData: PropsData = new PropsData();
 
     @property({ tooltip: "持续时间,单位为秒" })
     public duration: number = 0.3;
@@ -44,19 +37,17 @@ export class TweenData {
 }
 /**
  * 缓动组件,目前只支持节点的三个基础属性
- * 目前改动类后会导致编辑器内的属性记录丢失,请不要使用 
+ * 目前改动类后会导致编辑器内的属性记录丢失,请不要使用
  * @author 
  */
-@ccclass//('UITween')
+@ccclass
 @executeInEditMode()
 @playOnFocus()
 export class UITween extends cc.Component {
-    @property
-    private err = '属性记录会丢失,请不要使用'
     @property({ tooltip: "节点初始属性", type: PropsData })
     public fromData: PropsData = new PropsData();
-    @property({ tooltip: "节点目标属性", type: TweenData, serializable: false })//, serializable: false
-    public targetData: TweenData[] = [];//new TweenData()
+    @property({ tooltip: "节点目标属性", type: TweenData })
+    public targetData: TweenData[] = [];
     @property({ tooltip: "要播放缓动动画的目标,不填则是当前节点", type: cc.Node })
     public target: cc.Node = null;
     @property({ tooltip: "缓动效果", type: cc.Enum(TweenEasing) })
@@ -67,29 +58,40 @@ export class UITween extends cc.Component {
     public onOneRepeatComplete: cc.Component.EventHandler = new cc.Component.EventHandler();
     @property({ tooltip: "是否在缓动组件运行时自动播放缓动动画" })
     public playOnLoad: boolean = false;
+
+    private _edit_play: boolean = false;
     @property({ displayName: "编辑器预览" })
-    public _playOnEdit: boolean = false;
-    @property({ displayName: "编辑器预览" })//, editorOnly: true
-    get playOnEdit(): boolean {
-        if (this._playOnEdit) {
-            this.play()
+    get edit_play(): boolean {
+        if (this._edit_play && !this.edit_playing) {
+            this.edit_playing = true;
+            this.play();
         }
-        return this._playOnEdit;
+        return this._edit_play;
     }
-    set playOnEdit(v: boolean) {
-        this._playOnEdit = v;
+    set edit_play(v: boolean) {
+        this._edit_play = v;
+        if (this.target && v) {
+            this.target.stopAllActions();
+        }
+        if (!v) this.edit_playing = false;
     }
+    /** 编辑器是否正在播放 */
+    private edit_playing = false;
+
     public start() {
-        // if (CC_EDITOR && !this._playOnEdit) return;
         !this.target && (this.target = this.node);
         this.target = this.target || this.node;
         this.currentRepeat = this.repeat;
-        this.playOnLoad && this.play();
+        if (CC_EDITOR) {
+            this._edit_play && this.play();
+        } else {
+            this.playOnLoad && this.play();
+        }
     }
     private t: cc.Tween<any>;
     private currentRepeat: number;
     public play() {
-        if (CC_EDITOR && !this._playOnEdit) return;
+        if (CC_EDITOR && !this.edit_playing) return;
         if (this.repeat == 0) {
             this.t = cc.tween(this.target);
             this.readyPlay();
@@ -121,14 +123,14 @@ export class UITween extends cc.Component {
                     this.t = this.t.delay(targetData.delay);
                 }
                 let toData = {
-                    position: targetData.position,
-                    scale: targetData.scale,
-                    angle: targetData.angle
+                    position: targetData.propsData.position,
+                    scale: targetData.propsData.scale,
+                    angle: targetData.propsData.angle
                 }
                 if (targetData.isOffset) {
-                    toData.position = this.node.getPosition().add(targetData.position);
-                    toData.scale = this.node.scale + targetData.scale;
-                    toData.angle = this.node.angle + targetData.angle;
+                    toData.position = this.node.getPosition().add(targetData.propsData.position);
+                    toData.scale = this.node.scale + targetData.propsData.scale;
+                    toData.angle = this.node.angle + targetData.propsData.angle;
                 }
                 this.t = this.t.to(
                     targetData.duration,
@@ -137,6 +139,8 @@ export class UITween extends cc.Component {
                         easing: TweenEasing[this.tweenEasing] as any,
                         onComplete: (target: cc.Node) => {
                             targetData.onComplete && targetData.onComplete.emit([target]);
+                            this.edit_playing = false;
+                            this._edit_play = false;
                         },
                         onStart: (target: cc.Node) => { targetData.onStart && targetData.onStart.emit([target]) },
                         onUpdate: (target: cc.Node, ratio: number) => { targetData.onUpdate && targetData.onUpdate.emit([target, ratio]) }