再談網路遊戲同步

2021-03-31 16:54:18 字數 1424 閱讀 7711

呵呵,一年前的這個時候發過一系列討論網路遊戲同步的帖子。

一年後的今天,再重新討論討論這個問題。。。

不知道大家是否碰到過這種情況,當某個玩家發出乙個火球,這個火球有自己的運動

軌跡,那麼如何來判斷火球是否打中了人呢?大部分情況,當策劃提出這個要求的時

候,一般會被程式否認,原因是:太麻煩了,呵呵。複雜點的還有包括兩個火球相撞

之類的事情發生。

那麼網路遊戲中,是否真的無法模擬實現這種模擬呢?

首先我們來看看模擬此種操作會帶來什麼樣的麻煩:

1,伺服器必須trace火球的執行軌跡,乍一想,挺慢的。

2,網路延遲,傳過來有延遲,傳過去有延遲,延遲還不穩定,麻煩。

3,都有兩點解決不了了,接下來不願意再想了。

呵呵,實際上呢,對火球的模擬比對人物運動的模擬要輕鬆很多,原因很簡單,火球

的方向不會變。下面來看看具體用什麼樣的結構來實現:

不知道大家是否還記得我去年這個時候提到過的dead reckoning演算法,我們要模擬火

球運動的關鍵就在於乙個叫moving objects tracing server的伺服器程式,這個服務

器是幹什麼的呢。這個伺服器接收主遊戲伺服器發過來的註冊事件的資訊,比如有個

玩家,開始移動了,那麼主遊戲伺服器就把該玩家的運動pdu,包括方向,速度,加速

度,起點發給mots (moving objects tracing server),然後mots自己開始對其執行

進行模擬,當遊戲伺服器發來第二個pdu包的時候,則對各個物件的位置進行修正,並

重新開始模擬。那麼,我們模擬的目的是什麼呢?當然是發生某些事件,比如說碰撞,

或者掉入地圖的某個陷阱的時候,會將該事件回發給主邏輯伺服器。然後邏輯伺服器來

處理該事件。

那麼,對於火球的處理,也和處理其他玩家的同步一樣,當接收到玩家的發火球的指令

以後,產生乙個火球,並指定其pdu資訊,在mots上註冊該個運動物體。當mots自行模

擬到這個物體和其他玩家或者npc物體產生碰撞,則通知主邏輯伺服器,然後主邏輯服

務器產生相應的動作。

那麼關於延遲呢?有些人也許會說,比如說前面有個火球,我本地操縱的小人其實躲過

去了,但是因為網路延遲,在伺服器上我並沒有躲過去,那麼怎麼算?呵呵,不知道大

家玩過星際沒有,有沒有發現在星際中玩多人連線模式的時候,有一點最特別的地方,

就是控制乙個小兵的時候,點了地圖上的某個位置,但是小兵並不會馬上開始移動,而

是有一定的延遲,但是這一小點延遲並不能掩蓋星際的經典,同樣的理論用到這裡也成

立。對於客戶端的控制,當玩家操縱的主角改變pdu資訊的時候,確保資訊傳送到服務

器之後,再開始處理本地的操作指令,這樣就能保證本地的**和伺服器的**幾乎是

沒有什麼誤差的,即使有很小的誤差產生,以伺服器為主,這樣玩家也不會有太大的抱

怨。

網路遊戲同步問題

介紹 作為乙個程式,你想過網路多人對戰遊戲是怎麼做出來的嗎?從外行的角度來看多人對戰遊戲是很神奇的 2個或者更多的玩家在同乙個時間經歷了相似的遊戲經歷,感覺他們就像在同乙個虛擬世界中遊戲一樣。但是作為程式設計師我們卻知道事實並不是他們想象的那樣的,他們看到的絕大多數其實都是假象。他們所認為玩家間同時...

網路遊戲同步問題

介紹 作為乙個程式,你想過網路多人對戰遊戲是怎麼做出來的嗎?從外行的角度來看多人對戰遊戲是很神奇的 2個或者更多的玩家在同乙個時間經歷了相似的遊戲經歷,感覺他們就像在同乙個虛擬世界中遊戲一樣。但是作為程式設計師我們卻知道事實並不是他們想象的那樣的,他們看到的絕大多數其實都是假象。他們所認為玩家間同時...

網路遊戲同步法則

網路的硬體也有限,而人的創造也無限,在公網平均130ms的latency下,是不存在 完全的 的同步情況。如何通過消除 隱藏延時,將使用者帶入快速的互動式實時遊戲中,體驗完美的互動娛樂呢?以下六點,將助你分清楚哪些我們可以努力,哪些我們不值得努力,弄明白實時遊戲中同步問題關鍵之所在,巧妙的化解與規避...