所以在我的游戏中,我的视图被绘制的速率不一致。这反过来又使它出现故障。我在使用 invalidate(); 时遇到了很多问题;肉食。任何简单的想法——无论在哪里,我都会被大量密集的代码所困扰。
问问题
242 次
2 回答
2
您没有向我们提供太多信息,特别是代码。
您可以做的几件事是:
- 将初始帧速率设置为您观察到应用程序运行时的最低值,即,如果当前设置为 1/60,但帧速率连续下降到 1/30,设置为 1/30 等。
- 返工您的绘图调用以提高效率。
- 尝试通过矩阵相乘将多个变换组合成一个变换,即,如果您需要缩放、平移和旋转,将这三个矩阵相乘,然后将该单个变换应用于顶点,而不是应用三个单独的变换。
- 如果不必要,尽量不要遍历整个列表/数组。
- 尝试对必须在循环中处理的任何内容使用最低级别/最原始的结构,以避免拆箱的开销。
[编辑于 2012-08-27]
修复时间步的有用链接:http: //gafferongames.com/game-physics/fix-your-timestep/
于 2012-04-18T20:18:12.583 回答
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/
于 2012-04-18T21:50:17.157 回答