我在OpenGL中进行了一个练习,用几个对象的简单动画来编写游戏
在与我的合作伙伴讨论我们的设计选项时,我们已经意识到我们对动画的工作方式有两个主要选择,或者
将计时器设置为恒定间隔,例如30毫秒,当计时器命中时,计算对象应该在哪里并绘制帧.要么 -
不要使用计时器,只是一直运行的正常循环,并在每次迭代中检查通过了多少时间,根据间隔计算对象的位置并绘制框架.
通常应该采用哪种方法?有没有人有任何方法的具体经验?
尽可能快地渲染和计算以获得最大帧速率(由垂直同步限制)
不要使用计时器,它们在Windows上不可靠<50-100毫秒.检查已经过了多少时间.(通常,您需要delta t和绝对值,具体取决于您的动画是基于物理还是基于关键帧.)
另外,如果你想保持稳定,可以在时间步长上使用上限/下限,如果帧需要几秒钟来渲染(由另一个进程进行光盘访问?)或者如果你跳过更新,则进入慢动作在10毫秒内得到其中两个.
更新 (因为这是一个相当受欢迎的答案)
我通常更喜欢固定的时间步,因为它使一切更稳定.大多数物理引擎在不同的时间内非常强大,但是其他东西,如粒子系统或各种更简单的动画甚至游戏逻辑,在一切都按固定时间步长运行时更容易调整.
Update2 (因为我有10个upvotes;)
为了在长时间运行(> 4小时)内获得进一步的稳定性,您可能希望确保不使用浮点数/双精度来计算大的时间差,因为这样做会失去精确度并且您的游戏的动画/物理将受到影响.使用固定点(或基于64位微秒)的整数.
对于毛茸茸的细节,我建议阅读Tom Forsyth 的精确问题.