2012-04-18 62 views
0

所以在我的遊戲中,我的視圖被繪製出不一致的費率。反過來又會讓它變得糟糕。我已經遇到了無效問題(); meathod。任何簡單的想法 - 無論我看到什麼,我都會被大量密集的代碼所拋棄。如何製作一個穩定的遊戲循環

+0

你的問題是不是很描述的問題。你可以發佈一些代碼嗎?最好是你的遊戲引擎的主要部分? – slayton 2012-04-18 20:13:49

回答

1

這聽起來像你的遊戲循環不會考慮到已經之間傳遞的實際時間迭代。

問題是假設在循環迭代之間有一個固定的時間量。但是這個時間可以根據場景中的對象數量,計算機上的其他進程甚至計算機本身而變化。

在遊戲編程中這是一個常見的,有點微妙的錯誤,但它很容易被修復。訣竅是將時間存儲在每個繪製循環的末尾,然後將最後一次更新與當前時間的差異作爲開始。然後,您應根據實際耗用的時間縮放所有動畫和遊戲更改。

我已經寫了更多關於這在我的博客上,而回到這裏:http://laststop.spaceislimited.org/2008/05/17/programming-a-pong-clone-in-c-and-opengl-part-i/

第二部分專門介紹這個問題: http://laststop.spaceislimited.org/2008/06/02/programming-pong-in-c-and-opengl-part-ii/

2

您沒有向我們提供很多信息,特別是代碼。

有幾件事情你可以做的是:

  1. 設置初始幀頻你觀察你的應用程序中的最低值,在運行,也就是說,如果當前設置爲1/60,但幀速率連續驟降到1/30,設置爲1/30等
  2. 返修您的繪圖調用以提高效率。
  3. 嘗試通過乘以矩陣將多個變換組合成單個變換,即如果您需要縮放,平移和旋轉,將這三個矩陣相乘並將該單個變換應用於頂點而不是應用三個單獨的變換。
  4. 如果不必要,儘量不要遍歷整個列表/數組。
  5. 嘗試對循環中必須處理的任何內容使用最低級別/最原始的結構,以避免拆箱的開銷。

[於2012年8月27日編輯]

有用鏈接,固定你的時間步長:http://gafferongames.com/game-physics/fix-your-timestep/