2017-03-04 136 views
-2

我有一個簡單的C++和OpenGL遊戲,玩家可以拍攝目標。我想讓玩家在任何時候按'R'來重新開始遊戲,這會重置目標,玩家位置等。我的遊戲大多存在於主功能中,它首先設置物理和網格數據,然後我有一個do-while循環,每幀都繪製目標。如何讓遊戲隨時重新啓動?

我目前用GLFW捕捉用戶點擊Esc(在do-while循環中),這樣我就可以關閉窗口,但是我怎麼會重新開始遊戲?

我是否需要手動重置遊戲的變量,玩家位置,重畫目標等,還是有辦法在跳轉到遊戲循環之前跳轉並重新開始?

謝謝,如果這是微不足道的道歉。

編輯: 我現在有這樣的事情:

main() { 
initialise window; 
get mesh vertices; 
set textures; 
initialise Bullet physics; 

do { 
ray picking; 
render targets and walls; 
} while (glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS && 
     glfwWindowShouldClose(window) == 0); 
} 
+0

聲音非常廣泛。提供一些重新從主循環重新開始遊戲的事件。 –

+0

如果您已經使用model-command-view系統編寫了遊戲,那麼暫時刪除視圖應該不成問題。如果你不分青紅皁白地混合了模型,命令和視圖代碼,將它分離出來可能是一項相當大的工作, –

回答

1

我建議要回到繪圖板,從字面上。首先設計並將您的循環移出主體。產生一個線程來運行遊戲併產生線程來響應鍵盤事件,通過某種形式的同步來防止競爭條件。定義一個名爲GameReset的方法,通過停止遊戲線程並重新實例化對象來實現你想要的,它應該初始化它們自己的狀態。通過提供更多信息,例如操作系統和環境以及正在使用的開發庫,您將獲得更多幫助。我試圖幫助。

+0

謝謝,我感謝你的幫助。我真的沒有時間重新設計我的代碼,儘管您完全有理由這麼做。這只是一個額外的功能,如果可能的話,我只是希望引入一些內容,如「如果R被按下,從頂點加載點並設置碰撞盒之後再次運行主體」。 –