遊戲中的網路同步

2021-09-10 04:57:31 字數 1389 閱讀 5616

在網路遊戲中遊戲資料和狀態的同步是整個遊戲的基礎,而遊戲中對網路同步要求最高的就是戰鬥狀態的同步,它影響玩家的遊戲體驗。同時,不同型別遊戲的戰鬥狀態同步對網路同步要求又不一樣,所以產生了不同的網路同步機制。網路是有延時的,因為每個玩家的網路情況都不盡相同,而且每個玩家機器效能也不盡相同,這還會導致遊戲每幀渲染的延遲等,所以要做到真正意義上的完全同步是不大可能的。同步機制最重要的作用就是解決延遲等可能發生不一致的情況,使不同客戶端的遊戲表現效果大致相同。

根據有無中心伺服器,同步機制可以分為p2p和cs兩種模式。

p2p(peer-to-peer)模式:沒有中心伺服器,每個客戶端互相連線,任何一端發生資料或狀態改變立即通知其他客戶端更新數和狀態,使用udp協議居多。這種模式的優點就是各個客戶端直接連通,減少了伺服器帶來的延時,但是缺點也很明顯,由於缺少驗證,客戶端比較容易作弊,而且隨著客戶端的增加,各個客戶端需要保持的網路連線也會增加很多。

cs(client-server)模式:有中心伺服器,所有客戶端都和伺服器進行通訊,客戶端資料或狀態發生改變通知伺服器,由伺服器驗證之後**告訴所有客戶端,使用tcp協議居多。這種模式的優點就是全部資料都需要伺服器驗證,有效避免客戶端作弊,同時伺服器可以做更多的管理和限制,缺點就是客戶端依賴伺服器,如果伺服器發生斷線,所有客戶端都斷線,而且所有資料都要在服務端驗證給伺服器帶來了不小壓力。

該模式下又可以分為狀態同步和幀同步。

狀態同步:客戶端發生資料狀態改變時同步玩家的操作指令給伺服器,伺服器收到後計算遊戲行為的結果並進行驗證,然後**給所有其他客戶端,客戶端收到結果狀態後更新客戶端的資料狀態。

狀態同步最廣泛的應用應該是在回合制遊戲中。

狀態同步的優化:

幀同步:客戶端發生資料狀態改變時同步給伺服器的是玩家的操作指令,操作指令包含當前幀索引,伺服器收到指令後不做資料驗證(或者通過驗證伺服器進行驗證)**給所有其他客戶端,其他客戶端根據操作指令計算出客戶端資料狀態,同步資料狀態(需要做延時預判)。這裡有個重要的前提就是,所有客戶端或驗證伺服器需要保證相同的時機和相同的輸入可以計算出相同的輸出。

幀同步的特性導致客戶端的邏輯實現和表現實現必須完全分離。在一般的幀同步系統中,為了讓各個客戶端能持續的執行,而不是卡住,需要伺服器定時的下發乙個個「網路幀」資料來驅動各個客戶端。因為客戶端已經放棄了本地的時間,本地的迴圈驅動,所以這些「網路幀」就必不可少了。這些網路幀大部分實際上是「空」的,只有當玩家有輸入的時候,才會把玩家的遊戲操作的資料,填入到網路幀資料報中。

幀同步常被rts(即時戰略)遊戲常採用。

幀同步的優化:

參考:網遊流暢基礎:幀同步遊戲開發

六:幀同步聯機戰鬥(**,快照,回滾)

遊戲中的網路同步技術簡介

幀同步遊戲開發基礎指南

幀同步在競技類網路遊戲中的應用

《王者榮耀》技術總監覆盤回爐歷程:沒跨過這三座大山,就是另一款moba霸佔市場了

遊戲中物品的同步

以在揹包 倉庫中操作物品為例 維護到乙份 看到如下的流程 假設現在我在揹包中把物品從a格仔移動到b鴿子 已經有的關鍵字 物品型別 普通,特殊,消耗。等等 放入函式 使用物品型別掩碼判斷 1,2表示步驟 c1 從落點範圍判斷是否合法 比如揹包格仔是1 20,倉庫是40 60 如果滿足,傳送要移動的包給...

遊戲中幀同步與狀態同步

幀同步 什麼是幀同步 幀同步常被rts 即時戰略 遊戲常採用。在遊戲中同步的是玩家的操作指令,操作指令包含當前的幀索引。一般的流程是客戶端上傳操作到伺服器,伺服器收到後並不計算遊戲行為,而是 到所有客戶端。這裡最重要的概念就是 相同的輸入 相同的時機 相同的輸出。實現幀同步的流程一般是 同步隨機數種...

遊戲中同步使用者狀態之

目的 了解遊戲中怎麼維護使用者狀態,和同步每個使用者狀態機制。傳統方案 輪詢方案 談起輪詢讓我想起,在開發用用到輪詢的方案 b s開發中怎麼理解伺服器端的輪詢 不論你是採用foreach thread.sleep xx 還是採用timer,這一類都可以歸結為輪詢的處理方案。這種方案不在b s開發中常...