游戲提高性能 游戲降幀處理


什么是降幀&為什么降幀

一般情況下我們為了提高整個游戲的體驗,所以我們一般會將游戲的幀數(每秒鍾刷新多少次)設置的比較高。一般情況下,我們的游戲所有的代碼都是一幀執行一次。為了讓每一幀都變成真的關鍵數據幀。不過,部分手機能性能可能跟不上,或者計算量太大的情況下,手機的運算速度不能夠支持的情況,過高的性能消耗就會拖慢運算的速度,讓一秒內沒有辦法打到滿幀。所以就會覺得游戲變得卡頓。

其實一部分邏輯並沒有必要每一幀都去執行,可以將他們隔幾幀運行一次也不是不可以。比如說傷害值的運算,傷害應該與游戲運營的幀數無關,比如每0.1秒執行一次傷害代碼,那么在滿幀60幀的情況下,其實每6幀執行一次就OK。

或許你會問,如果我們的程序最少的邏輯間隔時間是0.1的話。所有的游戲邏輯都是間隔0.1判定一次不就好了?這不是很簡單的事情?但實際上事情並沒有那么簡單。一般情況下我們人眼的錄入認為是16幀每秒。那么理論上滿足16幀的游戲,我們就應該覺得很流暢了。但是你我都知道,16幀的游戲,並不能讓人覺得非常流暢。為什么?原因也非常簡單。人看到的東西會有預判,你看到這個怪物在水平移動,如果游戲表現出來的效果與你的預判是保持一致的,那么你就會覺得這是非常流暢的,但是如果怪物的移動跟你的預判不一致,那么你就會覺得這個游戲並不流暢。回答一下剛才自己提問的問題。為什么不可以,因為你把業務堆積到某一幀里邊去了。所以這一幀里邊的運算量跟你沒有降幀之前的運算量是一致的,相對於沒有運算的幀來說,你是卡頓的。這個時候。一會卡頓一會流暢。或許你打印出來的每秒的幀數是夠60的。但是你表現出來的效果並不流暢。

我們之所以希望能提高幀數,是為了制造流暢的感覺。但是降幀則會違反這種感覺。所以游戲的幀數不能降低,或者在准確一點來說,游戲的View的幀數不應該降低,減低的應該是邏輯幀數。

請原諒我取了一個比較迷惑的題目。其實這樣的原因,是希望你能夠讀下去。而不是看一眼題目就自以為知道具體是怎么處理了。

怎么降幀

從上文中,我已經提到了。我希望將游戲的幀數分為兩種,一種邏輯幀,一種View幀。View幀是滿幀在跑的。邏輯幀則是間隔執行的。也沒錯。上文中已經提到了,簡單的區分這兩種更新的實際也並不合適。因為依然會卡頓。那怎么才會不卡呢。將數據量分攤到各個幀里邊。

怪物會有兩種跟新模式

1、View更新:用來更新他的位置,動畫一類

2、用來更新行為:攻擊、打出傷害等等

 

主循環會有多個對象列表比如說6個

主循環會將每一次的Update標上記號。調用所有的對象的View更新方法和與標記相對應的對象列表的邏輯更新。

這樣就將所有的邏輯分攤到了各個幀數里邊。讓各個幀數更平均一些。達到流暢的目的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM