【问题标题】:Animation synchronisation with FPS与 FPS 的动画同步
【发布时间】:2016-03-23 20:29:27
【问题描述】:

目前我正在编写一个简单的 2D 游戏引擎(只是因为我想做,我知道已经有很多很棒的了)

但这只是顺便说一句...

我的实际问题:

我得到了一个正常的游戏循环,其中包含 update() 和 draw() 等方法。 现在我想显示一个 Sprite 动画(只有 3 帧),但它合乎逻辑,我得到的 fps 比 3 多(大约 ~90.000),但我不希望动画播放得这么快。我希望在一秒钟内完成一次播放。所以现在我的问题是:实现这一点的最佳方法是什么?我怎样才能将这些帧率一起翻译?我知道我可以做一些事情,比如将我的实际 FPS 与我的动画得到的帧相除,然后得到结果来知道我必须等到多少帧才能显示下一帧,但我不喜欢那样。 所以我需要你们的一些意见。

非常感谢您的阅读。

【问题讨论】:

    标签: animation sprite game-engine frame-rate game-loop


    【解决方案1】:

    创建一个每 1/30 秒触发一次以实现 30 FPS 性能的计时器,然后在该回调中进行绘图。 impl 可能需要根据绘制需要多长时间和其他问题来调整回调时间。要点是您的动画代码应该只需要根据时间偏移量(即调用显示回调的次数)来确定动画的“帧”。只要快速完成渲染时间,使渲染以均匀平滑的间隔开始,那么动画看起来不错。

    【讨论】:

      【解决方案2】:

      对于经过的每一帧,计算增量时间(当前帧与最后一帧之间的时间)并将其添加到计数器中,然后您可以使用此计数器根据您想要执行的速度来推进帧。

      ie:如果您希望动画每 0.5 秒前进一帧,则应为每一帧添加增量时间,一旦达到(或通过)500 毫秒 0.5 秒,您就可以前进一帧。

      通过这种方式,您可以考虑出乎意料的快/慢帧并获得一致的动画。

      【讨论】:

      • 谢谢你,又一个好主意,但这次没有丢帧。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2010-12-08
      相关资源
      最近更新 更多