我正在尝试在 SFML 中实现与帧无关的移动,但无法使其正常工作。当我之前在使用 SDL 时遇到这个问题时,我发现 Windows 会在应用程序的主线程移动时暂停它(通过拖动标题栏)。问题来了,因为当窗口被拖动时,时钟会更新,但直到我放开窗口才会绘制运动。当我移动窗口时,窗口不再被绘制,但时间仍在增加。因此,当我放开窗口时,如果没有拖动窗口,单元会立即跳转到它们所在的位置。
我尝试了一个解决方案,由于 Windows 只暂停主线程,我考虑只在一个单独的线程中运行整个游戏,然后在 main() 中启动它,但这似乎不起作用,因为发生了相同的结果。我还考虑过因此得到的极低 FPS,但我无法区分拖动窗口的人和他们的游戏是否自然运行缓慢......必须有一种方法防止windows暂停主线程,或者做一些防止这个问题的事情,但我在互联网上没有找到任何解决方案......
这是演示问题的 zip 文件的链接。Demo0 和 Demo1 都是一样的,只不过 Demo1 使用了第二个线程来运行程序,但是效果是一样的。只需运行两者并观察增量值输出到命令行。然后拖动窗口并将其移动到屏幕的其他部分。当您放手时,您应该会看到一个非常大的 delta 值,并且圆圈应该会向前跳跃,具体取决于您暂停窗口的时间。源代码都在那里(在“src”文件夹中),所以我希望人们能理解确切的问题:http ://www.sendspace.com/file/4er8f4