【发布时间】:2015-04-10 03:05:44
【问题描述】:
我正在和一个朋友一起做一个小游戏,一个问题是当你拖动窗口时,它会冻结并且程序完全停止,直到你放手。我搜索了一个简单的解决方案,但我发现它发生在所有事情上。此外,它搞砸了增量时间,因为它就像一个非常长的帧。有没有办法让程序在移动时继续运行,或者如果太复杂,修复增量时间?谢谢?
【问题讨论】:
标签: c++ visual-studio-2013 windows-8 window sdl-2
我正在和一个朋友一起做一个小游戏,一个问题是当你拖动窗口时,它会冻结并且程序完全停止,直到你放手。我搜索了一个简单的解决方案,但我发现它发生在所有事情上。此外,它搞砸了增量时间,因为它就像一个非常长的帧。有没有办法让程序在移动时继续运行,或者如果太复杂,修复增量时间?谢谢?
【问题讨论】:
标签: c++ visual-studio-2013 windows-8 window sdl-2
您的应用程序很可能“冻结”,因为它有一个类似于此的 WinMain 循环:
while (true)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
TickGame();
}
}
所以不是打勾,而是处理 WM_MOVE message 。一个简单的解决方法是在移动消息中调用您的游戏滴答功能,或者当您收到第一个移动消息时暂停游戏并在您一两秒内没有收到消息时取消暂停它可能是有意义的。也就是说,人们真的会在播放时拖动窗口吗,不太可能。
要回答您的第二个问题,通常游戏(尤其是物理引擎)会使用固定时间步长来稳定模拟,请阅读有关固定时间步长的更多信息here。
【讨论】: