小编Dar*_*911的帖子

游戏循环设计

我想创建一个简单的游戏循环。我正在考虑这两个版本:

v.1:

while (continueRunning) {

        PeekMessage(&msg, 0, 0, 0, PM_REMOVE);

        TranslateMessage(&msg);
        DispatchMessage(&msg);

        if (WM_QUIT == msg.message) {
            continueRunning = false;
        }

        // run the game logic

    }
Run Code Online (Sandbox Code Playgroud)

和 v.2:

while(continueRunning)
{
    // peek for messages
    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);

        if (msg.message == WM_QUIT)
            continueRunning = false;
    }

    // run the game logic
}
Run Code Online (Sandbox Code Playgroud)

什么是更好的解决方案?是否需要有PeekMessage在while循环像在第二个例子?

c++ windows

1
推荐指数
1
解决办法
90
查看次数

主应用程序循环中的消息 ID

我写了一个简单Win32 App的Visual Studio的2019对10场。在WinMain函数内的主消息循环中,我有:

while (Msg.message != WM_QUIT) {

    if (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE) > 0) {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);

        swprintf_s(msgbuf, _T("In the PeekMessage loop cnt: %d, msg: %d\n"), loop_cnt++, Msg.message);
        OutputDebugString(msgbuf);
    }
...
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

In the PeekMessage loop cnt: 0, msg: 799
In the PeekMessage loop cnt: 1, msg: 49300
In the PeekMessage loop cnt: 2, msg: 96
In the PeekMessage loop cnt: 3, msg: 96
In the PeekMessage loop cnt: …
Run Code Online (Sandbox Code Playgroud)

c++ winapi visual-studio

0
推荐指数
1
解决办法
47
查看次数

标签 统计

c++ ×2

visual-studio ×1

winapi ×1

windows ×1