最近在写一个win32的游戏,就发现刷新率总是不对,特别慢,就很疑惑。然后发现正确的主循环应该怎么放。
新建的没有更改的win32程序的主函数_tWinMain
的主消息循环是这样的:
// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
if语句里是处理来自系统的消息,比如鼠标的移动、点击、键盘的按键。要把系统处理和游戏构成有机整体。
应该把它改为如下,比如根据时间不断刷新,上下。
// 主消息循环:
ZeroMemory(&msg, sizeof(msg)); //这句特别重要,因为需要将msg初始化后才不会引起编译异常、运行异常
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
{
...这里放游戏主循环,兼顾处理系统消息和游戏循环
}
}