LWJGL游戏循环暂停每当点击GLFW窗口头



我有一个非常简单的游戏循环。

public void gameLoop() {        
long now;
long updateTime;
long wait;

final int TARGET_FPS = 60;
final long OPTIMAL_TIME = 1000000000 / TARGET_FPS;

while (!window.shouldClose()) {
now = System.nanoTime();

update();
render();
frame++;

updateTime = System.nanoTime() - now;
wait = (OPTIMAL_TIME - updateTime) / 1000000;
try {
Thread.sleep(wait);
} catch (Exception e) {

}
}

glfwTerminate();

}

每当我单击窗口的头部(关闭和最小化按钮所在的栏)时,循环出于某种原因暂停。游戏中的声音会继续播放(我使用的是AL10),所以这会导致音乐和声音与游戏不同步。我想在发生这种情况时暂停窗口。

我但是通过GLFW回调,似乎没有一个解决这个问题。焦点回调只工作,如果我点击窗口外,windowPos回调只工作每当窗口被移动,而不是当你简单地点击并按住窗口头。

有办法解决这个问题吗?

这实际上是在某些平台上的预期行为,例如Windows,只要你按住鼠标按钮和/或可能拖动/移动窗口,glfwPollEvents就会有效地阻塞Win32 API调用。

为了解决这个问题,你应该让你的游戏循环独立于窗口事件处理循环,使用单独的线程。

主线程必须处理窗口事件(glfwPollEventsglfwWaitEvents),以保持与macOS等其他平台的要求一致,而另一个线程可以做游戏更新和渲染。

最新更新