所以基本上我想每次都画图,即使在移动窗口时也是如此,因为我使用的是增量时间来移动动画和东西。这意味着如果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/

10-11 02:18