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の上/下に置くと、何も描画されません。

そしてしばらくして、単純な長方形を描くと、それらは互いに重なり始めます。約1分間正常に動作し、長方形のグリッドを描画します(設定したウィンドウサイズがウィンドウの正しいサイズではないため、位置がずれています。しばらくすると、別のグリッドが描画され、場合によっては完全にねじれてしまいます。ウィンドウがクラッシュしたようです。VisualStudioで「停止」ボタンを押す必要があります。

では、ゲームループを正確にどこに配置し、いつゲームを描画するかをどのように知ることができますか?私は主に長方形を描く必要がありますが、それもあまりうまくいきません。

4

1 に答える 1

1

WM_PAINTメッセージを処理するときは、WindowsメッセージコールバックからDrawGame()を呼び出す必要があります。

メッセージループでは、Windowsメッセージをフェッチして適切なコールバックにディスパッチするだけです。

さらに、これはゲームの世界を更新する場所でもありますが、ドローコールを行うための場所ではありません。

于 2012-08-06T11:45:46.593 に答える