至此,一個比較成熟的網路遊戲的同步機制已經初步建立起來了,接下來的邏輯代碼就根據各自不同的遊戲風格以及側重點來寫了。
同步是網路遊戲最重要的問題,如何同步也牽扯到各個方面的問題,比如說遊戲的規模,遊戲的類型以及各種各樣的方面,對於規模比較大的遊戲,在同 步方面可以下很多的工夫,把消息分得十分的細膩,對於不同的消息採用不同的同步機制,而對於規模比較小的遊戲,則可以採用大體上一樣的同步機制,究竟怎麼 樣同步,沒有個定式,是需要根據自己的不同情況來做出不同的同步決策的網遊同步演算法之導航推測(Dead Reckoning)演算法:
——————————————————————————————————————————
網路遊戲同步詳解之二
在瞭解該演算法前,我們先來談談該演算法的一些背景資料。大家都知道,在網路傳輸的時候,延遲現象是很普遍的遊戲天堂,而在基於Server/Client結構 下的網路遊戲的同步也就成了很頭疼的問題,在保證客戶端回應用戶本地指令流暢的情況下,沒法有效的保證的同步的及時性。同樣,在軍方也有類似的事情發生, 即使是同一LAN裏面的機器,也會因為傳輸的延遲,導致一些運算的失誤,介於此,美國國防部投入了大量的資金用於研究一種比較的好的方案來解決分佈式系統 中的延遲問題,特別是一個叫分佈式模擬運動(Distributed Interactive Simulation)的系統,這套系統呢,其中就提出了一套號稱是Latency Hiding & Bandwidth Reduction的方案,命名為Dead Reckoning。呵呵,來頭很大吧,恩,那麼我們下麵就來看看這套系統的一些觀點,以及我們如何把它運用到我們的網路遊戲的同步中。
首先,這套同步方案是基於我那篇《網路遊戲的同步》一文中的Mutual Synchronization同步方案的,也就是說,它並不是Server/Client結構的,而是基於客戶端之間的同步的。下麵我們先來說一些本文中將用到的名詞概念:
網狀網路:客戶端之間構成的網路
節點:網狀網路中的每個客戶端
極限誤差:進行同步的時候可能產生的誤差的極值
恩,在探討其原理的之前,我們先來看看我們需要一個什麼樣的環境。首先,需要一個網狀網路,網狀網路如何構成呢?當有新節點進入的時候,通知該 網路裏面的所有節點,各節點為該客戶端在本地創建一個副本,登出的時候,則通知所有節點銷毀本地關於該節點的副本。然後每個節點該保存一些什麼數據呢?首 先有一個很重要的包需要保存,叫做協議數據包(PDU Protocol Data Unit),PDU包含節點的一些相關的運動資訊,比如當前位置,速度,運動方向,或者還有加速度等一些資訊。除PDU之外,還有其他資訊需要保存,比如 說節點客戶端人物的HP,MP之類的。然後,保證每個節點在最少8秒之內要向其他節點廣播一次PDU資訊。遊戲天堂最後,設置一個極限誤差值。到此,其環境就算搭 建完成了。下麵,我們就來看看相關的具體演算法:
留言列表