【发布时间】:2014-05-12 00:09:52
【问题描述】:
所以基本上我想在每次移动窗口时都进行绘制,因为我使用增量时间来移动动画和内容。这意味着如果opengl停止,时间还在继续,有时它会让玩家穿过墙壁并眨眼到其他地方:/如何解决这个问题?我已经尝试使用线程但它不起作用(或者至少我编码错误)..
【问题讨论】:
所以基本上我想在每次移动窗口时都进行绘制,因为我使用增量时间来移动动画和内容。这意味着如果opengl停止,时间还在继续,有时它会让玩家穿过墙壁并眨眼到其他地方:/如何解决这个问题?我已经尝试使用线程但它不起作用(或者至少我编码错误)..
【问题讨论】:
如果 deltaT 太大,您可以设置它的上限。或者,如果您对渲染和移动有单独的调用(无论如何我建议您这样做,这样您就可以在没有非常大的移动的情况下丢弃渲染帧),并且 deltaT 变得太大,将其分解为几个较小的调用。
封顶:
public void update(int deltaMs) {
if (deltaMs > 100) {
deltaMs = 100;
}
...
从更新中分离渲染并进行小更新:
public void update(int deltaMs) {
while(deltaMs > 100) {
updateImpl(100);
deltaMs -= 100;
}
updateImpl(deltaMs);
render();
}
你甚至可以结合这两种方法:
public void update(int deltaMs) {
// Cap at one second.
if (deltaMs > 1000) {
delatMs = 1000;
}
// Handle movements in small steps to avoid going through walls etc.
while(deltaMs > 100) {
updateImpl(100);
deltaMs -= 100;
}
updateImpl(deltaMs);
render();
}
【讨论】: