游戏帧同步
主要記錄一下之前做幀同步游戲的一些心得和預(yù)想
一部分借鑒了這里的處理 幀同步聯(lián)機(jī)戰(zhàn)斗(預(yù)測(cè),快照,回滾)
1.浮點(diǎn)數(shù)處理
浮點(diǎn)數(shù)轉(zhuǎn)定點(diǎn)數(shù)
由于傳統(tǒng)浮點(diǎn)數(shù)的計(jì)算在不同機(jī)型上會(huì)有不同的計(jì)算結(jié)果,并且隨著時(shí)間的積累誤差會(huì)越來越大。因此需要一個(gè)方案去解決這些問題。
2)定點(diǎn)數(shù)方案:小數(shù)點(diǎn)固定的數(shù),例如一個(gè)16位的定點(diǎn)數(shù),前八位處理整形數(shù)據(jù),后八位處理小數(shù)。
其它的定點(diǎn)數(shù)相關(guān)
2.協(xié)議相關(guān)
3.邏輯與渲染分離
1) 數(shù)據(jù)推算單獨(dú)走一套邏輯,顯示走一套邏輯
2) 客戶端幀指令帶入時(shí)間戳,根據(jù)延遲統(tǒng)計(jì)計(jì)算幀指令
4.數(shù)據(jù)校驗(yàn)
1) 多客戶端校驗(yàn)(3個(gè)及以上):多數(shù)對(duì)比原則,超過半數(shù)的數(shù)據(jù)一致時(shí)數(shù)據(jù)比較可靠
2) 少數(shù)客戶端校驗(yàn)(2個(gè)及一下):結(jié)合輔助布局在服務(wù)器的終端進(jìn)行輔助校驗(yàn),相對(duì)成本會(huì)高一點(diǎn)
3) 純服務(wù)端校驗(yàn):服務(wù)端也跑一遍客戶端的邏輯進(jìn)行校驗(yàn)
5.幀指令
除去協(xié)議好,幀指令可包括幀號(hào),子指令數(shù)組,客戶端時(shí)間戳,服務(wù)器時(shí)間戳(根據(jù)延時(shí)數(shù)據(jù)做出對(duì)應(yīng)的預(yù)測(cè)方案)
6.內(nèi)存快照
為了應(yīng)對(duì)斷線重連以及中途玩家加入引入的數(shù)據(jù)。可固定時(shí)間重置一次內(nèi)存狀態(tài)信息(位置,動(dòng)作,技能,碰撞等信息)
7.快速演算
1)加上內(nèi)存快照快速演算
2) 從頭開始加速演算
3) 靜默演算(后臺(tái)默默計(jì)算數(shù)據(jù),前臺(tái)靜默)
8.過程數(shù)據(jù)校驗(yàn)
在過程中提交結(jié)果關(guān)鍵數(shù)據(jù),用于校驗(yàn)最終結(jié)果是否合法
9.數(shù)據(jù)預(yù)測(cè)和回滾
2) 位置預(yù)測(cè),預(yù)測(cè)錯(cuò)誤則要根據(jù)最近的內(nèi)存快照快速演算追上
3) 對(duì)于網(wǎng)絡(luò)好的玩家減少預(yù)測(cè),網(wǎng)絡(luò)差的玩家增加預(yù)測(cè)
4) 動(dòng)作預(yù)測(cè)? 特殊形況下的動(dòng)作預(yù)測(cè)
5) 客戶端命中服務(wù)器未命中的命中邏輯優(yōu)化(服務(wù)器慢于客戶端造成的信息差處理,射擊類游戲必做)
10.幀同步指令幀合成圖:
總結(jié)
- 上一篇: LC1584. 连接所有点的最小费用
- 下一篇: ixchariot