2012-04-05 50 views
3

我正在編碼吉他英雄克隆遊戲。它工作的很好,但在快速電腦中(高幀率),動畫並不總是流暢。我的意思是有時候音符會滾動。我發現問題可能與我的遊戲循環有關,它不會限制fps(因爲我正在更新傳遞幀時間,我認爲這不是必需的)。當從140fps到60發生下降時,這些顛簸是顯而易見的。編寫一個更好的遊戲循環

我看了一下這個網站:http://www.koonsolo.com/news/dewitters-gameloop/,我試圖實施「FPS依賴於恆定遊戲速度」的方法來查看問題是否得到解決。

問題是我的遊戲更新和渲染穩定在60fps,而聲音回調似乎被稱爲比這更多。我正在使用Audiere for Sound和SDL進行定時器/輸入。

我以爲SDL_Delay會暫停遊戲線程直到完成,但似乎並非如此。有什麼我失蹤? SDL是不是一個真正的時間庫?

+1

您可能會對Unity3D處理此問題的方式感興趣,請查看http://unity3d.com/support/documentation/ScriptReference/Time-deltaTime.html – OneThreeSeven 2012-04-05 13:31:29

回答

4

一些示例代碼或僞代碼對了解您在做什麼會很有幫助。從SDL_Delay的文檔:

此函數在返回之前等待指定的毫秒數。它至少在指定的時間等待 ,但由於操作系統調度可能會更長。粒度至少爲10毫秒,延遲爲 。有些平臺的時鐘週期更短,但最常見的是 。

它可能會延遲太多。假設你正在使用while循環,你是否嘗試過'繼續減慢繪製?如果您執行了SDL_Delay(1),則可能需要更長的時間,從而導致計算錯亂。

+0

@ Shahbaz只是在這裏重溫並意識到我忘了提供反饋對這個。事實證明這是一個SDL_Delay()問題,因爲我正在運行一個忙碌循環,直到我想等待的時間結束。 – 2012-05-31 21:55:48

1

SDL對於遊戲來說確實很棒!這一直是我的最愛,因爲它的水平令人驚訝。

您的SDL音頻回調將始終以非常快的速度調用!通常情況下,您會看到以60fps呈現的視覺動畫,因爲這對我們來說看起來不錯。 PC音頻一般以44,100採樣/秒運行。這需要更多的維護,以確保音頻設備有樣品播放! SDL將盡可能快地觸發回調,以防止音頻故障。