当您在 SDL2 中移动 window 时,如何修复程序冻结?

How do you fix a program from freezing when you move the window in SDL2?

我正在和一个朋友做一个小游戏,一个问题是当你拖动 window 时,它会冻结并且程序完全停止,直到你松手。我搜索了一个简单的解决方案,但我只发现它发生在所有事情上。此外,它搞砸了增量时间,因为它就像一个非常长的帧。有什么方法可以让程序在移动时继续 运行,或者如果太复杂,修复增量时间?谢谢?

您的应用程序很可能是 "freezing",因为它有一个与此类似的 WinMain 循环:

while (true) 
{
    if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    else
    {
       TickGame();
    }
}

所以它没有勾选而是处理 WM_MOVE message 。一个简单的解决方法是在移动消息中调用您的游戏 tick 函数,或者当您收到第一个移动消息时暂停游戏并在一两秒钟内没有收到消息时取消暂停它可能是有意义的。也就是说,人们真的会在玩游戏时拖 window 吗,不太可能。

要回答您的第二个问题,通常游戏(尤其是物理引擎)会使用固定时间步长来稳定模拟,请阅读有关固定时间步长的更多信息 here