2011-04-29 180 views
4

最近我一直在研究一個多人聯網應用程序。我已經使用Bonjour服務和NSStream對象成功實現了客戶端服務器模型。雙向溝通已成功完成。多人聯網遊戲中的同步?

我面臨的問題是:運行應用程序的兩個設備通過本地wifi連接。將消息從客戶端發送到服務器時存在延遲問題,反之亦然。

描述簡要:

  • 這是一個賽車遊戲,最多兩個玩家。
  • 一臺服務器和其他客戶端。
  • 當客戶端按下按鈕時,一個特定的消息被髮送到服務器,告訴服務器哪個鍵或按鈕被按下。然後,服務器作出相應的響應,並在服務器本身上對客戶的汽車進行更改。這些變化並不總是相同的。客戶端屏幕上的汽車的實際位置與服務器屏幕上的汽車的實際位置總是存在差異。

任何想法?

+0

也許代替將按鍵發送到服務器,您應該只將汽車的狀態發送到服務器。像速度,x,y,z位置。這樣在客戶端機器上就不會出現延遲,但服務器和客戶端之間可能存在不一致。 – netbrain 2011-04-29 13:25:54

+1

[處理網絡遊戲中的延遲]可能的重複(http://stackoverflow.com/questions/42515/dealing-with-latency-in-networked-games) – 2011-04-29 13:25:55

+6

@netbrain - oh親愛的上帝沒有。規則#1 *永遠不要相信客戶* – 2011-04-29 13:26:47

回答

9

歡迎來到網絡世界。 :)

這些是遊戲網絡編程的經典難點。有很多不同的技術來克服這些問題。

這個博客有很好的信息,可能會幫助你。

http://gafferongames.com/networking-for-game-programmers/

你可能會在這篇文章中特別感興趣:

http://www.gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking

祝你好運!

+0

我剛剛簽出了評論,布賴恩羅奇包括您的問題與[在網絡遊戲中處理延遲]鏈接(http://stackoverflow.com/questions/42515/dealing-with-latency-in-networked - 遊戲),並給出了答案之一有一篇關於Source引擎如何處理這些問題的文章。這是一個很棒的閱讀!你應該檢查出這個問題。 – KTF 2011-04-29 13:59:31

+0

@All:謝謝你帶領我走向正確的方向....我在想我可以發送客戶端鍵輸入到服務器和服務器作爲回報發送物理和所有更新的數據到客戶端,然後客戶端使用該數據更新其繪圖....這是正確的方式..? ? – Tornado 2011-05-11 13:13:57

+0

是的,知道 - 現在最大的區別(與Quake乞討)是客戶端會在等待服務器返回用戶輸入更新的同時做出「受過教育的猜測」......這裏有插值和精彩(讀:複雜)的東西這樣才能讓這個過程順利進行。無論如何 - 這些都在提供的鏈接中。我建議你閱讀這些。 – KTF 2011-05-12 19:14:17