Tween yoyo是永久性的

时间:2013-01-17 11:41:25

标签: actionscript-3 flash tween

最初的目标是在event1上反向播放动画,通常在event2上播放动画。所以我使用了这段代码:

/* some imports */
public class Element extends MovieClip {
        private var tween:Tween;

        public function Element() {
            tween = new Tween(this, "y", Regular.easeInOut, -this.height, 0, 0.7, true);
            tween.stop();

            this.addEventListener(event1, reverse);
            this.addEventListener(event2, normal);
        }

        private function reverse(e:Event1) {
            tween.yoyo();
        }

        public function normal(e:Event2) {
            tween.stop();
            tween.rewind();
            tween.start(); 
        }
}

现在我测试了它:  1.事件1发生,动画播放正常  2.事件2发生,动画反向播放  3.发生了Event1 1,反向播放了动画

由于一些奇怪的原因,yoyo在某种程度上是永久性的。我知道一些变通方法,比如为每个动画创建新的Tween,检查是否已经使用了yoyo等等。

这是预期的行为吗?在adobe API中,我读到了开始和结束道具,它们都有“在创建新的Tween实例或调用Tween.yoyo()方法时,此属性被设置为参数。”。我有手动重置它们吗?

不希望使用Tweenmax,tweenlite或任何外部库。

1 个答案:

答案 0 :(得分:1)

The manual说要让你的补间再次正常运行,请调用另一个yoyo()。不幸的是,补间本身并没有提供任何暗示,如果它现在是yoyo,所以你需要跟踪它。

    private var tween:Tween;
    private var tween_yoyo:Boolean;
    private function reverse(e:Event1) {
        if (!tween_yoyo) tween.yoyo();
        else {
            tween.stop();
            tween.rewind();
            tween.start(); 
        }
        tween_yoyo=true;
    }

    public function normal(e:Event2) {
        if (tween_yoyo) tween.yoyo();
        else {
            tween.stop();
            tween.rewind();
            tween.start(); 
        }
        tween_yoyo=false;
    }