所以基本上我想每次都画图,即使在移动窗口时也是如此,因为我使用的是增量时间来移动动画和东西。这意味着如果opengl停止,时间仍然在流逝,有时它会使玩家穿过墙壁然后眨眼到另一个地方:/如何解决?我已经尝试使用线程,但是它不起作用(或者至少我编码错了)。
最佳答案
如果增量太大,您可以限制增量。或者,如果您分别调用渲染和运动(我还是建议这样做,这样就可以丢弃渲染帧而不会产生很大的运动),并且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();
}
关于java - OpenGL在移动窗口LWJGL时停止绘制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23580245/