如何使用AS3计时器执行和循环不同长度的影片剪辑?

时间:2011-05-13 02:25:47

标签: flash actionscript-3 timer movieclip countdown

如何使用计时器一次启动多个影片剪辑,然后如果它们的长度不同则循环播放,以便它们再次重新同步?

例如,假设在t = 0时,启动了3个影片剪辑。影片剪辑1长达3秒。电影剪辑2长6秒。电影剪辑3长达10秒。影片剪辑1将在影片剪辑2和3之前结束,但我不希望它重新启动,直到其他人都完成。

此外,是否可以设置倒计时,以便在持续时间之后但在特定时间之后启动影片剪辑?例如,不是让计时器倒计时从10秒开始然后播放,而是倒计时直到中午12点,然后播放影片剪辑。如果可以,有人可以告诉我怎么做?

提前致谢。

2 个答案:

答案 0 :(得分:0)

以下是我将如何解决您的第一个问题 - 只需将所有动画MovieClip添加到mcs数组中。

var mcs:Array = [mc1,mc2,mc3];

// work out the longest running MovieClip
var longest:MovieClip = mcs[0];

var i:MovieClip;
for each(i in mcs)
{
    if(i.totalFrames > longest.totalFrames) longest = i;

    i.addEventListener(Event.ENTER_FRAME, animation);
}

/**
 * Check animation progress on each MovieClip
 */
function animation(e:Event):void
{
    var m:MovieClip = MovieClip(e.target);

    if(m.currentFrame == m.totalFrames)
    {
        m.stop();

        if(m == longest)
        {
            var i:MovieClip;
            for each(i in mcs)
            {
                i.gotoAndPlay(1);

                // your own actions here
                // for when all animation completes
            }
        }
    }
}

至于后一个问题,我不确定你为什么要这样做,但这是一个简单的方法:

var d:Date = new Date();
var time:String = d.getHours() + ":" + d.getMinutes();

var ran:Boolean = false;
if(time == "12:00" && !ran)
{
    ran = true;
    // being your animations etc
}

答案 1 :(得分:0)

将此代码用于最长剪辑:

longestClip.addFrameScript(longestClip.totalFrames, restartAllMyClips);

restartAllMyClips是一个将重启它们的函数。

有意义吗?

对于时间问题 - 你可以让上面的代码调用一个名为waitAndPlay(time)的函数

基本上在该函数中,您可以计算该时刻与作为参数传递的时间之间的时间量。

然后你只需为这段时间设置一个Timer。在该计时器上设置一个侦听器以执行restartAllMyClips。

这样的事情:

var waitTimer:Timer = new Timer(duration, 1);
waitTimer.addEventListener(TimerEvent.TIMER_COMPLETE, restartAllMyClips);
waitTimer.start();

以下是addFrameScript() - http://blog.rackdoll.nl/?p=118

的一些信息