2011-10-13 23 views
2

我有一个对象,我想要应用两个补间动画。我尝试将它们追加到时间轴,但我遇到一些问题。当我测试它,大部分时间我不得不点击多次为了得到结果。还有一件奇怪的事情发生,如果我设置第二个补间的时间超过1秒(实际上超过0.5),它工作。我工作在闪光灯CS4和班级链接到一个对象。意外的TimeLineMax功能障碍

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); 
    } 
    } 
} 

回答

2

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

+0

谢谢,我想我意识到我犯了什么错误。我没有按照你的建议做,而是将TimelineMax类导入并初始化为doAnimate方法,一切顺利。我只想问,是否有方法来初始化TimelineMax类无需直接启动它。添加或插入所需的补间并按需启动。是否重新启动方法是唯一方法? –

+0

当然,您可以通过在如下变量中传递paused:true来暂停TimelineMax: var tl:TimelineMax = new TimelineMax({paused:true}); – Jack