我使用Visual C++ 2008 Express和Ogre3D sdk編寫遊戲。異步屏幕更新爲遊戲玩法邏輯,C++
我的核心遊戲邏輯被設計爲以100次/秒的速度運行。爲了簡單起見,我會說這是一種名爲'gamelogic()'的方法。這不是基於時間的,這意味着如果我想將遊戲時間提前1秒,我必須將「gamelogic()」調用100次。 'gamelogic()'與遊戲的屏幕渲染相比是輕量級的。
Ogre有一個「偵聽器」邏輯,告知您的代碼何時繪製框架以及何時完成繪製框架。如果我在幀渲染之前調用「gamelogic()」,那麼遊戲將受到屏幕渲染速度的很大影響,屏幕渲染速度可能從5fps到120fps不等。
想到的最簡單的解決方法是:計算自去年渲染的幀中的時間和呼叫「gamelogic()」下一幀之前很多次:100 * timeElapsedInSeconds
不過,我pressume了「正確「的方式是使用多線程;有一個單獨的線程運行'gamelogic()'100次/秒。
問題是,我該如何做到這一點?當兩個獨立的線程發生衝突時,可以做些什麼:gamelogic改變屏幕內容(3d對象座標),同時Ogre同時呈現屏幕。
許多在此先感謝。
遊戲從固定渲染率假設,以追蹤框倍切換前一段時間 - 他們習慣了依賴知道處理器在8赫茲運行。當他們推出16Hz的機器時,他們包括一個'turbo按鈕'將處理器從16Hz切換到8Hz,這樣遊戲仍然可以以正確的速度運行。有趣的事實。 – Kieveli 2009-05-28 14:21:46