伺服器負責轉化客戶端的操作,每個客戶端在固定的邏輯幀執行該幀所有客戶端的操作命令,通過在嚴格一致的時間軸上執行同樣的命令序列得到同樣的結果。
伺服器按幀**客戶端的操作,客戶端進行確定性運算和一致性模擬
伺服器承載所有計算,客戶端只做表現。主流的大型mmo遊戲都採用狀態同步。
幀同步狀態同步
一致性邏輯上絕對一致,天然要求一致性
也可以做到絕對一致。但一般來說增量式預表現的狀態同步會有一些拉扯不同步現象。
響應性操作需要傳送到伺服器再等伺服器返回按幀執行,可以做預表現但很受限,響應性較差狀態同步可以更好的進行預表現,響應性較好。
頻寬人數較少時頻寬極低,但隨著人數增長,頻寬幾何程度的增加。幀同步無法做 mmo 類的遊戲
可以通過各種方式優化頻寬,可以開發千人萬人戰鬥遊戲。
延遲對延遲要求高,高延遲體驗很差
可以通過延遲補償,智慧型**等優化方式在高延遲下降低延遲感受。
開發效率
開發簡單,幾乎不需要聯調,但排查 bug 很難。任何乙個錯誤都有可能導致不同步的嚴重後果(硬體、隨機數、未初始化變數、使用浮點數、渲染幀計算邏輯等等)。
開發會複雜很多,需要大量聯調
玩家數量
少量玩家
少量和海量都可以
跨平台較難(不同的硬體不同的編譯器等原因導致一些計算不一致,裝置不一致,特別是浮點數,可以通過定點數來解決,但是要求非常嚴格,測試難度很高)
較容易外掛程式
在伺服器也跑戰鬥邏輯的情況下,天然就容易反作弊。但如果伺服器不跑邏輯,多人競技也可以通過投票機制等反作弊。但是都反不了全圖掛
防外掛程式難度依賴伺服器跑邏輯的比例和開發時是否考慮反作弊,可以一定程度上避免全圖掛。狀態同步可以在反作弊上做的更極致
優化伺服器可以做到極低的開銷。客戶端負載較高,需要整個戰鬥的所有執行(要求邏輯和渲染分離)
支援更多的優化手段
對於大部分遊戲來說,兩種同步方式都可以使用。但相比之下狀態同步適用型更廣,特別適合複雜度高,延遲要求高,玩家多的遊戲,例如fps,mmo等等。幀同步相對適合小兵很多,玩家少且固定,單局時間短,對打擊感公平性要求高,追求一致性的遊戲,例如格鬥,運動,rts,卡牌,moba等。
狀態同步和幀同步
狀態同步 傳送操作給服務端。服務端處理計算邏輯,更新客戶端資料 幀同步 傳送操作給服務端。服務端中轉所有資料 通過隨機因子保證每次得出結果一樣 總結一下 1 對於回合制戰鬥來講,其實選用哪種方式實現不是特別重要了,因為本身實現難度不是很高,採用狀態同步也能實現離線戰鬥驗證。所以採用幀同步的必要性不是...
幀同步和狀態同步
實時遊戲發展迅猛,同步技術也逐漸成為解決方案的核心之一。本文簡單討論了幀同步和狀態同步。什麼是幀同步 幀同步常被rts 即時戰略 遊戲常採用。在遊戲中同步的是玩家的操作指令,操作指令包含當前的幀索引。一般的流程是客戶端上傳操作到伺服器,伺服器收到後並不計算遊戲行為,而是 到所有客戶端。這裡最重要的概...
幀同步和狀態同步(一)
什麼是幀同步 幀同步常被rts 即時戰略 遊戲常採用。在遊戲中同步的是玩家的操作指令,操作指令包含當前的幀索引。一般的流程是客戶端上傳操作到伺服器,伺服器收到後並不計算遊戲行為,而是 到所有客戶端。這裡最重要的概念就是 相同的輸入 相同的時機 相同的輸出。實現幀同步的流程一般是 同步隨機數種子。一般...