《游戲編程模式》筆記——游戲循環(huán)
什么是游戲循環(huán)
我相信絕大多數(shù)游戲并不是運(yùn)行后自動噼里啪啦的處理一堆數(shù)據(jù)后就自動關(guān)閉的程序。
游戲會等待玩家的輸入,處理數(shù)據(jù),最后把畫面渲染出來告訴玩家的輸入結(jié)果,即使不輸入,處理數(shù)據(jù)和畫面渲染也會一直進(jìn)行下去,直到玩家關(guān)閉整個游戲。
輸入、處理、渲染就構(gòu)成了最簡單也是最關(guān)鍵的游戲循環(huán)。
幀率
那么游戲循環(huán)的速度究竟多快才合適呢?
我們用實際的時間來測試循環(huán)的運(yùn)行速度便得到了幀率(FPS),越高的幀率意味著越流暢的游戲體驗,但是幀率會受到游戲本身以及運(yùn)行游戲的機(jī)器配置受到影響。
固定幀率
通常,可以把幀數(shù)固定為30FPS或者60FPS,這意味著每幀可以讓游戲處理更多的事情。
假設(shè)我們想讓游戲以60FPS運(yùn)行,每幀約16毫秒。只要我們能在這個時長內(nèi)處理完所有的事情,游戲就可以穩(wěn)定的以60FPS運(yùn)行,而我們需要在所有的處理完成后等待一段時間。

再進(jìn)一步,我們希望每幀游戲可以多處理幾次,更充分的利用每一幀的時間,我們可以讓處理進(jìn)行循環(huán),并增加一個步長,在步長追趕上真實時間后再進(jìn)行渲染。

這樣,我們充分的利用了每一幀的時間,但需要我們確定好一個合適的步長。
控制游戲速度的幾種方案
固定時間步長,沒有同步:
最簡單,我們只需要盡可能快的運(yùn)行游戲。游戲速度受游戲復(fù)雜度和硬件性能直接影響,游戲速度和游戲循環(huán)緊密相關(guān)。
固定時間步長,有同步:
比上一個方案復(fù)雜一點,需要在循環(huán)結(jié)尾增加同步點,使游戲不會運(yùn)行太快,這節(jié)約了一部分性能,對硬件比較友好。但是沒有分離處理和渲染,會是播放減慢。
動態(tài)時間步長:
通過動態(tài)步長,避免游戲運(yùn)動太快或者太慢,但會讓游戲變得不確定且不穩(wěn)定。
固定時間更新時間步長,動態(tài)渲染:
最復(fù)雜,也最具適應(yīng)性。以固定的時間更新步長,如果需要追趕上玩家的時間,可以扔掉一些渲染幀。
同樣可以避免游戲運(yùn)行的太快或者太慢,但也更復(fù)雜,需要在實現(xiàn)的時候?qū)懜嗟臇|西。需要將更新的時間步長調(diào)整的盡可能小來適應(yīng)高端機(jī)器,同時不至于在低端機(jī)上太慢。
參考
《游戲編程模式》