这是我在普通窗口中的当前游戏循环:
while(running)
{
while( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )
{
if( msg.message == WM_QUIT )
{
running = false;
}
TranslateMessage( &msg );
DrawGame(&game);
DispatchMessage( &msg );
}
UpdateGame(&game);
InvalidateRect(hwnd, NULL, 1);
//Sleep(100);
}
...但是我应该在Translate和DispatchMessage之间放置DrawGame吗?如果我把DrawGame放在UpdateGame的上方/下方,那么就不会有任何东西被绘制出来。
过了一会儿,如果我绘制一个简单的矩形,它们会开始重叠。它运行良好大约一分钟,绘制一个矩形网格(由于window size that you set isn't the correct size of the window而不在位置。过了一会儿,它绘制了另一个网格,有时它完全搞砸了,窗口看起来已经崩溃了,我必须在Visual Studio中按“停止”按钮。
那么,我到底在哪里放置一个游戏循环,我怎么知道什么时候画游戏?我需要首先绘制矩形,尽管这样做也不是很好。
答案 0 :(得分:1)
在处理 WM_PAINT 消息时,您应该从Windows消息回调中调用 DrawGame()。
在消息循环中,您应该仅将Windows消息提取和分派到适当的回调。
此外,这也是更新游戏世界的地方,但不是用于进行绘制调用。