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