0

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

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);
}

...但我真的应该将 DrawGame 放在 Translate 和 DispatchMessage 之间吗?如果我将 DrawGame 放在 UpdateGame 上方/下方,则不会绘制任何内容。

过了一会儿,如果我画一个简单的矩形,它们就会开始相互重叠。它运行了大约一分钟,绘制了一个矩形网格(由于:您设置的窗口大小不是正确的窗口大小而导致位置不正确。过了一会儿它绘制了另一个网格,有时它完全搞砸了窗口似乎已经崩溃,我必须在 Visual Studio 中按下“停止”按钮。

那么,我究竟应该在哪里放置一个游戏循环,以及我如何知道何时绘制游戏?我主要需要绘制矩形,尽管这也不是很好。

4

1 回答 1

1

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

在消息循环中,您应该只获取 Windows 消息并将其分派给适当的回调。

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

于 2012-08-06T11:45:46.593 回答