我正在尝试在Flex中的两个不同的补间动作之间循环。这是我到目前为止所做的:
在声明中:
<fx:Declarations>
<s:Animate id="goRight"
duration="3000" target="{nShape}" >
<s:SimpleMotionPath property="x" valueFrom="0" valueTo="400" />
</s:Animate>
</fx:Declarations>
运行动画:
var animate:Boolean = true;
var isLeft:Boolean = true;
while (animate)
{
if (isLeft)
{
goRight.play(null);
while (goRight.isPlaying){};
}
else {
goRight.play(null, true); // play it backwards
while (goRight.isPlaying){};
}
isLeft = !isLeft;
}
问题是,一旦我启动动画(通过单击按钮),我会收到超时错误,说脚本已经运行超过15秒,没有发生任何补间。如果我只是简单地动画一次动画就可以了。有谁知道如何让这种永久性的补间工作?
答案 0 :(得分:3)
...你有3个while循环,永不破坏......
Flash没有线程(还),它是基于事件的语言。如何使用事件来检查动画完成时的进度或数字(应该发送一个完整的事件)。
这不是Java。这是一种基于视觉,无线程,异步,基于框架的语言。
答案 1 :(得分:2)
问题在于:
while (goRight.isPlaying){};
致电goRight.play(null);
后,上述while
语句将无限期循环,因为goRight.isPlaying
为真。
如果您需要此证明,请将以下内容添加到while
循环中:
trace("I'm playing");
你需要摆脱while
循环并使用其他一些构造;也许事件处理程序?我不确定现在最好的做法是什么...自从我使用补间动画以来已经有一段时间了,但我知道在那天曾经有一些事件可以在补间动画结束时挂钩。