SFML – 框架独立运动+拖动窗口

我试图在SFML中实现独立于框架的运动,但是无法正常工作。 当我在SDL中遇到过这个问题时,我发现Windows在暂停应用程序的主线程(拖动标题栏)的时候会停下来。 问题来了,因为当窗口被拖动时,时钟更新,但移动不被绘制,直到我放开窗口。 当我移动窗口,窗口不再被吸引,但时间还在增加。 因此,当我放开窗户时,如果窗户没有被拖动,这些单位立即跳到他们将要到达的地方。

我试着想过一个解决scheme,由于Windows只暂停主线程,我认为只是在一个单独的线程中运行整个游戏,并在main()中启动它,但是看起来没有发生同样的结果。 我也想到了我得到的FPS非常低,但我无法区分有人拖着窗户,如果他们的游戏是自然而然地缓慢运行的… …必须有办法防止窗口暂停主线程,或者做一些防止这个问题,但我还没有find任何forms的解决scheme在互联网上…

这是一个链接到一个zip文件,它演示了这个问题。 Demo0和Demo1都是一样的,除了Demo1使用第二个线程来运行程序,但同样的效果发生。 只要运行两个并观察delta值输出到命令行。 然后拖动窗口并将其移动到屏幕的其他部分。 当你放手的时候,你会看到一个非常大的三angular洲值,这个圆圈应该跳到前面,这取决于你停下了窗户的时间。 源代码都在那里(在“src”文件夹中),所以我希望人们可以理解确切的问题: http : //www.sendspace.com/file/4er8f4

    我看到问题的两个解决方案:

    您可以尝试查看sf :: Events LostFocus或Resized的事件是否拖动窗口,如果这样做,只需暂停游戏中的时钟即可。 更多信息可以在这里找到: http : //www.sfml-dev.org/tutorials/2.0/window-events.php

    但是,如果这不起作用,我会简单地在你的三角洲增加一个大写字母。 意思是说,如果游戏高于特定的三角洲(1/60或1/30)的门槛,你可以将德尔塔设置为一个较低的值。 在你的情况下,这个帽子可能会很大,比如1/15。

    if(delta > 1/15.0f) delta = 1/15.0f; 

    你不希望你的游戏能以15fps的速度播放,而且如果用户在移动的时候拖动了窗口,那么最糟糕的情况是恢复速度为15fps。