我正在使用Scala语言。 使用的库是:Akka,LWJGL(包括GLFW)
当以高fps(例如4000)进行测试时,一切都按预期工作。但是当我通过添加10万个立方体将fps降低到30时,glfw的关键轮询似乎会出现问题。
当我释放一个键时,会立即使用新的key_pressed事件调用回调,然后在几秒钟之后再发出一个新的键。有关详细示例,请参阅此视频:https://youtu.be/l2kCWWK44ig
我确保只有1个回调处于活动状态,并且只有1个glPollEvents()调用。 如果这不够奇怪,每次更新循环调用glPollEvents()20次似乎可以缩短密钥发布和第二次key_released事件之间的时间......
谢谢!
答案 0 :(得分:0)
我没有找到导致它的原因,但问题已经消失。根据我的理解,在运行速度低于60 fps的多线程游戏中,在同一个线程中运行glfw和opengl会导致glfw轮询内部线程中的奇怪行为。为了解决这个问题,我在主窗口线程下创建了一个子线程,并设置了一个快速的滴答循环,以比窗口刷新率更快的速率调用glfwPollKeys。问题现在已经消失了,代价是循环和线程。