我已經實現了一個服務器/客戶端體系結構,其中所有狀態更改都發送到該函數,驗證並廣播給所有連接的客戶端。這很有效,但系統並沒有保持遊戲的客戶端實例之間的同步。多人遊戲同步
如果在服務器和特定客戶端之間發生了5秒的延遲,那麼他將在剩餘客戶端5秒後收到狀態更改,從而導致遊戲狀態不同步。我一直在尋找各種方法來實現客戶端之間的同步系統,但迄今爲止還沒有發現。
我是網絡編程的新手,並不那麼天真地認爲我可以自己創造一個工作系統,而不用花費大量的時間。然而,我一直在想的是保持某種時間系統,因此每個狀態變化都會連接到遊戲中的特定時間戳。這樣,當一個客戶收到狀態改變時,它會準確地知道遊戲的哪個時期發生了改變,並且反過來能夠關聯滯後。這種方法存在的問題是,在那些時間滯後的遊戲中,客戶端會繼續遊戲,因此客戶端將不得不及時回滾以更新狀態更改,這肯定會變得混亂。
所以我正在尋找論文討論的主題或解決它的算法。也許我對整個多人遊戲系統的設計是有缺陷的,因爲客戶端的遊戲實例不應該更新,除非從服務器接收到概念。現在客戶只是在遊戲循環中更新自己,假設任何狀態都沒有改變。
有趣的問題。 – Ian 2009-09-11 16:03:33
我相信你應該重新考慮接受的答案。 Havenard對於今天使用的航位推算法或任何其他滯後技術一無所知。遊戲並非只是宣佈「落後的球員應該接受他們的狀況」;他們會努力隱藏延遲,以便讓遊戲更具可玩性。畢竟,如果我玩了一個遊戲,那裏的人們到處跳來跳去,我幾乎不能玩,我會很快離開那個遊戲。 – Ricket 2010-02-09 15:59:43