2012-08-06 100 views
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翻譯和DispatchMessage函數之間?如果我將DrawGame放在UpdateGame的上面/下面,就不會畫任何東西。

而過了一段時間,如果我畫一個簡單的矩形,他們開始重疊海誓山盟。它運行良好約一分鐘,繪製一個矩形的網格(由於:window size that you set isn't the correct size of the window。位置不合適,並在一段時間後,它繪製另一個網格,有時它完全擰緊,窗口似乎崩潰了,我必須按「停止」按鈕在Visual Studio。

那麼,究竟在那裏我把一個遊戲循環,我如何知道什麼時候繪製的遊戲嗎?我需要primarly繪製矩形,雖然不工作那麼好無論是。

回答

1

處理一個WM_PAINT消息時,你應該調用DrawGame()從你的Windows消息回調。

在消息循環中,您應該只獲取並將Windows消息分派給相應的回調。

此外,這也是更新遊戲世界的地方,但不適用於進行繪製調用。