繁体   English   中英

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

[英]Game loop in GDI window / doesn't refresh and crashes after a while

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

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

那么,我到底在哪里放置游戏循环,又如何知道何时绘制游戏? 我需要首先绘制矩形,尽管那样也不怎么好。

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

在消息循环中,您应该只获取Windows消息并将其发送到相应的回调。

此外,这也是更新游戏世界的地方,但不适用于进行抽签。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM