GDI窗口中的游戏循环/不会刷新并在一段时间后崩溃

时间:2012-08-06 11:21:59

标签: c++ gdi draw game-loop

这是我在普通窗口中的当前游戏循环:

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中按“停止”按钮。

那么,我到底在哪里放置一个游戏循环,我怎么知道什么时候画游戏?我需要首先绘制矩形,尽管这样做也不是很好。

1 个答案:

答案 0 :(得分:1)

在处理 WM_PAINT 消息时,您应该从Windows消息回调中调用 DrawGame()

在消息循环中,您应该仅将Windows消息提取和分派到适当的回调。

此外,这也是更新游戏世界的地方,但不是用于进行绘制调用。