让系统时间决定动画速度,而不是程序FPS

时间:2010-03-26 14:34:36

标签: actionscript-3 animation movieclip frame-rate slowdown

我正在使用ActionScript 3编写一个纸牌游戏。每张卡都由一个类的实例表示,该类扩展了从Flash CS4导出的动画片段,其中包含卡片图形和翻转动画。当我想要翻转一张卡片时,我会在这个动画片段上调用gotoAndPlay。

当帧速率减慢时,所有动画都需要更长时间才能完成。默认情况下,Flash将以确保剪辑中的所有帧都将被绘制的方式为动画片段设置动画。因此,当节目帧速率低于剪辑的帧速率时,动画将以较慢的速度播放。

我希望动画始终以相同的速度播放,因此总是会在屏幕上显示相同的时间。如果帧速率太慢而无法显示所有帧,则会丢弃帧。是否可以通过这种方式告诉Flash动画?如果没有,我自己编写此行为的最简单方法是什么?

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用Timer(或setInterval)触发每1000 / fps毫秒,告诉MovieClip转到下一帧。

如果您需要更准确的内容,则必须检查自上次更新后花费的时间(从this article from Keith Peters' blog的第一条评论中窃取,这很好地解释了一切)。

答案 1 :(得分:0)

我使用Flash已经有一段时间了,但据我所知,这是不可能的,因为Flash使用基于帧的动画模型。

Silverlight使用基于时间的动画模型,只会绘制帧速率允许的中间帧数。

答案 2 :(得分:0)

补间类(fl.transitions.Tween)非常适合这种情况。通过将构造函数的最后一个参数设置为TRUE,它将动画/触发器设置为几秒钟,据我所知,它可以补偿FPS的丢失/增益。

通过将新对象(Trigger(new Object(), "x")传递给构造函数并为MOTION_FINISH(TweenEvent.MOTION_FINISH)创建一个侦听器来触发事件,您可以像Timer类一样轻松使用它!

我使用Tweens有很多东西,因为它们很容易,快速,并且受到所有东西的支持。就像我说的,它应该解决你的FPS /滞后问题,因为它实时调整到FPS变化(据我所知!)。