Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LWJGL帧速率,带和不带Display.sync()_Java_Lwjgl_Frame Rate - Fatal编程技术网

Java LWJGL帧速率,带和不带Display.sync()

Java LWJGL帧速率,带和不带Display.sync(),java,lwjgl,frame-rate,Java,Lwjgl,Frame Rate,这是我好奇了一段时间的事情。我有一个游戏,它在几何方面非常基本(二维中有几千个四边形),当我不使用Display.sync()时,我的帧速率约为550。但是,当游戏需要执行一些广泛的计算时(当世界发生变化时),FPS下降到约480。每次迭代调用Display.sync(60)时,FPS上限为60,但当执行相同的计算时,FPS会降至52左右,游戏会有点结巴。这与其说是一个实际问题,不如说是一个令人烦恼的问题,但我仍然很好奇为什么会发生这种情况。当FPS完全能够保持在60以上时,为什么FPS会降到6

这是我好奇了一段时间的事情。我有一个游戏,它在几何方面非常基本(二维中有几千个四边形),当我不使用Display.sync()时,我的帧速率约为550。但是,当游戏需要执行一些广泛的计算时(当世界发生变化时),FPS下降到约480。每次迭代调用Display.sync(60)时,FPS上限为60,但当执行相同的计算时,FPS会降至52左右,游戏会有点结巴。这与其说是一个实际问题,不如说是一个令人烦恼的问题,但我仍然很好奇为什么会发生这种情况。当FPS完全能够保持在60以上时,为什么FPS会降到60以下?此外,有没有办法防止这种情况发生?

我对LWJGL没有直接的经验,但很明显,当您指定60 FPS时,它实际上不会测量实时FPS并对其进行解释。在理想情况下,如果不需要做其他工作,它可能只需要60 FPS所需的睡眠时间


正如我所说的,我不知道LWJGL的细节,但将主游戏线程与图形线程分开是典型的做法。这将提高单核系统的性能,因为图形线程睡眠所花费的时间可用于游戏线程的计算。现在不管发生什么,时间都花在睡觉上了。使用单独的线程也更好,因为游戏的速度不再与图形FPS绑定

如果我要实施这个,你会建议我怎么做?将图形代码移动到新线程需要移动OpenGL上下文(我使用的是LWJGL,所以我不确定在C或C++中是否会出现这种情况),这将需要相当多的繁琐且可能不稳定的代码重新定位,以便将其与逻辑代码分离。如果移动图形代码很困难,那么您可以移动计算?此外,您可能还需要注意并发性问题(在游戏线程更新对象时绘制线程读取等)。