在SDL2中移动窗口时,如何修复冻结程序?

时间:2015-04-10 03:05:45

标签: c++ visual-studio-2013 windows-8 window sdl-2

我正和一位朋友做一个小游戏,一个问题是,当你拖动窗户时,它会冻结,程序会完全停止,直到你放手为止。我搜索了一个简单的解决方案,但我发现它发生在所有事情上。此外,它会加剧delta时间,因为它的作用就像一个非常长的帧。是否有任何方法可以让程序在移动时继续运行,或者如果太复杂,修复增量时间?感谢?

1 个答案:

答案 0 :(得分:1)

您的申请很有可能"冻结"因为它有一个类似于此的WinMain循环:

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

因此,处理WM_MOVE message而不是滴答作响。一个简单的解决方法就是在移动消息中调用您的游戏滴答功能,或者当您获得第一个移动消息时暂停游戏并且如果您没有获得一秒或二。也就是说,人们真的会在播放时拖动窗口,不太可能。

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