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