意外的TimeLineMax功能障碍

时间:2011-10-13 02:43:22

标签: flash actionscript-3 greensock

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

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

1 个答案:

答案 0 :(得分: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的专用论坛中提问(我们会努力在那里及时回答问题)。