在动作行之间暂停

时间:2009-06-10 17:14:20

标签: actionscript delay

这是我想在代码中做的事情。 为汽车的MC设置动画,持续时间为x秒。 完成汽车后,将狗的MC移动几秒钟。 等等...

使用此代码,所有动画都会同时执行。

car.slideTo(200,100,1);
dog.slideTo(200,100,5);
blimp.slideTo(200,100,2);

...

是否可以写一个暂停函数来放入这些行之间? 我尝试过使用getTimeout,但我想避免将每个动画定义为单独的函数。

5 个答案:

答案 0 :(得分:4)

不幸的是,目前无法做到这一点。 ActionScript是一种单线程语言,它不支持在没有回调的情况下使用计时器。但是,这个功能当然是可能的(通过一个称为协同例程的线程系统),并且可以在将来的语言版本中添加。

但是现在,我们一直坚持使用setTimeout()。

答案 1 :(得分:3)

您可以尝试使用setInterval(my_func,1000),它会在1秒后调用my_func。

答案 2 :(得分:2)

您可能想要使用SetInterval()

这是一个可能有用的简单示例:

var Timer = setInterval(delay, 500); //calls the function delay after 500 milliseconds

function delay () {
    trace("delayed!");
    clearInterval(Timer); //stops the function from being called again
}

答案 3 :(得分:1)

我强烈建议您使用TweenMax http://blog.greensock.com/tweenmaxas3/

它拥有您可以梦寐以求的所有动画补间功能,包括在代码中间暂停。

它也非常易于使用,例如

import gs.TweenMax;
// move the movieclip to (500,200) in 2 seconds:
var myTween:TweenMax = new TweenMax(mc, 2, {x:500, y:200});

你可以随时暂停它,比如

myTween.pause();

但在你的情况下,你可能想要排队你的补间

所以你可以这样写

import gs.*;

var tween1:TweenMax = new TweenMax(mc1, 1, {x:300,y:400});
var tween2:TweenMax = new TweenMax(mc2, 1, {x:200,y:400});
var tween3:TweenMax = new TweenMax(mc3, 1, {x:100,y:400});

var myGroup:TweenGroup = new TweenGroup([tween1, tween2, tween3]);
myGroup.align = TweenGroup.ALIGN_SEQUENCE;

此外,TweenMax& Tweensy目前是AS3中存在的最快的补间库,但在我看来TweenMax更容易使用,这里不同补间引擎之间的比较http://blog.greensock.com/tweening-speed-test/

答案 4 :(得分:0)

您的问题或多或少地暴露了对ActionScript如何工作的误解。 Flash正在执行您的内容时,它的作用是:首先运行所有帧脚本,然后将动画推进一帧,然后更新屏幕。然后它运行下一帧的所有脚本,然后再次推进动画,然后更新屏幕。

因此,如果您在两行代码之间放置某种暂停功能,Flash在暂停期间根本不会执行任何操作,因为它仍在尝试完成那组帧脚本。然后,一旦暂停结束,然后 Flash将最终更新屏幕,因此所有三个动画仍然可以同时工作。

这可能看起来很痛苦,但getTimeout是您应该使用的。或者,您还可以使用包含一个功能的补间库来延迟补间的开始,例如Unreality的答案中显示的那个。在它下面是相同的事情。