我在OpenGL(GLUT)和C++中編寫遊戲戰艦。如何在OpenGL(GLUT)和C++中進行遊戲邏輯?
我知道該怎麼做,以圖形的東西(如顯示領域和預定義的船舶), 但是,我應該把我的遊戲代碼,如:
- 如果鍵左按下選擇離開一個字段並顯示它
- 如果船舶放置然後顯示船體
觀光等地方對船舶(字段之間的切換)我無法在顯示做()函數,但如果船舶放置它必須是由display()函數繪製,對嗎?
我不知道把遊戲邏輯放在哪裏。
我在OpenGL(GLUT)和C++中編寫遊戲戰艦。如何在OpenGL(GLUT)和C++中進行遊戲邏輯?
我知道該怎麼做,以圖形的東西(如顯示領域和預定義的船舶), 但是,我應該把我的遊戲代碼,如:
觀光等地方對船舶(字段之間的切換)我無法在顯示做()函數,但如果船舶放置它必須是由display()函數繪製,對嗎?
我不知道把遊戲邏輯放在哪裏。
你所尋找的是基本的,經典game loop。實際上,您的遊戲運行在一個巨大的循環中。在這個循環中,您處理用戶輸入,對用戶輸入做出反應,運行AI,並更新視頻/音頻作爲響應。當然,這是一個非常簡單的考慮,但它足以應付戰艦。
概念,或多或少:
while(Game.IsRunning)
{
Input = GetInput();
Game.Update(Input);
Display(Game);
}
如果你實際上做,而不是實時事件驅動的,那麼你需要讓你的更新,考慮到自上次傳遞時間更新以及玩家輸入。我會保持這個簡短,並限於你所問的內容。
GLUT
提供的功能來攔截鼠標鍵盤事件,如
void keyboardDown(unsigned char key, int x, int y);
void mouseClick(int button, int state, int x, int y);
void mouseMotion(int x, int y);
您可以重新實現這些功能,讓你的程序的自定義行爲。
例如,如果您想在用戶按「s」後畫一條船,那麼在您的keyboardDown
函數中,可以將全局標誌設置爲1.然後,在顯示函數中,您可以檢查該標誌。如果它是1
那麼你會畫你的船。
當然這取決於你如何放置/移動你的船:)
如需進一步信息,看看在documentation