如何制作一致的游戏循环

时间:2012-04-18 20:10:11

标签: android loops view

所以在我的游戏中,我的视图得出了不一致的费率。这反过来又使它变得很糟糕。我曾经遇到过很多与invalidate()有关的问题; meathod。任何简单的想法 - 无处不在我看起来被大量强烈的代码抛弃了。

2 个答案:

答案 0 :(得分:2)

您没有向我们提供太多信息,特别是代码。

你可以做的一些事情是:

  1. 将初始帧速率设置为您观察应用程序运行时的最低值,即,如果当前设置为1/60,但帧速率连续下降到1/30,设置为1/30等。
  2. 重写您的绘图调用以提高效率。
  3. 尝试通过乘以矩阵将多个变换组合成单个变换,即如果需要缩放,平移和旋转,则将这三个矩阵相乘并将该单个变换应用于顶点,而不是应用三个单独的变换。
  4. 如果不必要,请尽量不要遍历整个列表/数组。
  5. 尝试对循环中必须处理的任何事情使用最低级别/最原始的结构,以避免拆箱的开销。
  6. [编辑于2012-08-27]

    用于修复时间步的有用链接:http://gafferongames.com/game-physics/fix-your-timestep/

答案 1 :(得分:1)

听起来你的游戏循环没有考虑迭代之间经过的实际时间。

问题是假设循环迭代之间存在固定的时间量。但是这个时间可以变化,具体取决于场景中的对象数量,计算机上的其他进程,甚至是计算机本身。

这在游戏编程中是一个常见的,有点微妙的错误,但它很容易被纠正。诀窍是在每个绘制循环结束时存储时间,然后将最后一次更新的差异与开始时的当前时间进行比较。然后,您应该根据实际经过的时间缩放所有动画和游戏更改。

我在博客上写了更多关于此内容的文章:http://laststop.spaceislimited.org/2008/05/17/programming-a-pong-clone-in-c-and-opengl-part-i/

第二部分专门讨论了这个问题: http://laststop.spaceislimited.org/2008/06/02/programming-pong-in-c-and-opengl-part-ii/