2

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

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

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

4

3 回答 3

1

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

如果您需要更准确的信息,则必须检查自上次更新以来所花费的时间(从 Keith Peters 博客的这篇文章的第一条评论中窃取,该评论很好地解释了一切)。

于 2010-03-26T14:57:15.480 回答
0

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

然而,Silverlight 使用基于时间的动画模型,并且只会在帧速率允许的范围内绘制尽可能多的中间帧。

于 2010-03-26T14:51:19.987 回答
0

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

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

我在很多事情上都使用 Tweens,因为它们简单、快速并且得到了一切支持。就像我说的那样,它应该可以解决您的 FPS/滞后问题,因为它可以实时调整 FPS 变化(据我所知!)。

于 2010-11-30T23:52:29.717 回答