2

我有一个对象,我想应用两个补间动画。我尝试将它们附加到时间轴,但我遇到了一些问题。当我测试它时,大多数时候我必须多次点击才能获得结果。另外发生了一件奇怪的事情,如果我将第二个补间的经过时间设置为超过 1 秒(实际上超过 0.5)它可以工作。我在 flash cs4 中工作并且该类链接到一个对象。

package {

import com.greensock.*;
import com.greensock.easing.*;
import flash.display.MovieClip;
import flash.events.MouseEvent;

public class Border extends MovieClip
{
     private var myTimeline : TimelineMax = new TimelineMax( );

    public function Border( ) {             
    }   

    public function doAnimate ( ev : MouseEvent )
    {
        myTimeline.append(TweenMax.to(this, 0.5, { width : 400 } ) );
        myTimeline.append(TweenMax.to(this, 0.5 , { height : 400 } ) ); // <--
    }
    public function deAnimate ( ev : MouseEvent )   
    {       
        myTimeline.reverse( );
    }
  }
}

主班

package {

import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;

public class Document extends MovieClip {

    public function Document( )     {
        right.addEventListener( MouseEvent.CLICK , border.doAnimate );
        left.addEventListener( MouseEvent.CLICK , border.deAnimate );
    }
  }
}
4

1 回答 1

2

您立即创建了 TimelineMax 实例(在您的构造函数之上),它立即开始播放,但您直到稍后才填充它(显然是在 MouseEvent.CLICK 上)。因此,您将补间定位在虚拟播放头之前的时间线中。例如,假设当您将补间动画放入 0 秒位置时,时间线的播放头位于 5 秒。在http://forums.greensock.com/viewtopic.php?f=1&t=3842&p=15044#p15044有更全面的解释. 解决方案非常简单:只需在 doAnimate() 方法中重新启动 TimelineMax。这显然会使虚拟播放头移到开头。还有其他一些方法可以处理这个问题,但我认为在你的情况下最简单的方法是重新启动()时间线。随时在http://forums.greensock.com的专用论坛中提问(我们努力让问题得到及时的回答)。

于 2011-10-18T20:19:15.620 回答