3

这是我想在代码中做的事情。为汽车的 MC 设置动画 x 秒。汽车完成后,移动一只狗的 MC y 秒。等等...

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

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

...

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

4

5 回答 5

4

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

但是现在,我们被 setTimeout() 困住了。

于 2011-12-19T00:37:51.740 回答
3

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

于 2009-06-10T17:20:32.403 回答
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
}
于 2009-06-10T17:24:35.517 回答
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/

于 2009-06-10T17:22:49.280 回答
0

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

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

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

于 2009-06-11T04:23:46.987 回答