2013-08-18 320 views
2

我試圖在我的RTS遊戲中實現多人遊戲。這不是基於回合的方式,所以我認爲我應該使用UDP,對吧?爲RTS遊戲實現多人遊戲

我也有點困惑應該從客戶端發送到服務器。遊戲中顯示的每個對象(建築物,樹木,單位等)都位於一個GameObject類型的ArrayList中(它跟蹤位置和所有好東西)。因此,一種方法是讓客戶端將其ArrayList發送到服務器,並將其與其他人合併,然後將其發回。另一種方式是將客戶端輸入(他點擊什麼和選擇什麼等)發送到服務器,並讓服務器決定應該發生什麼。這會在給單位或其他任何命令時造成延遲。

所以我想我的問題是,除了有關使用UDP/TCP的問題,我該如何構建多人遊戲部分?應該從客戶端發送到服務器等等。

回答

5

您所描述的網絡類型最適合實時遊戲,只有少數運動部件可以處理丟失的數據(FPS等)。 RTS遊戲的問題在於,它們通常涉及太多的單位以使用標準UDP狀態複製模型進行復制。相反,大多數RTS遊戲使用什麼叫鎖步。這是通過同步每臺機器之間的遊戲狀態,然後將鼠標點擊事件傳送給遊戲的所有玩家來實現的。給定相同的初始遊戲狀態,並應用相同的事件,遊戲對於所有玩家來說都是一樣的。雖然TCP可能更容易,但可以使用TCP或UDP協議來實現此目的。

閱讀有關步調一致的帝國時代:

1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond

而不是將遊戲中的每個單元的狀態中, 的期望是在每臺機器上運行完全相同的模擬, 同時傳遞由 用戶發佈的相同命令集。個人電腦基本上可以同步他們的 遊戲手錶的最佳戰爭電影傳統,允許玩家發出 命令,然後以完全相同的方式同時執行 並擁有相同的遊戲。

+1

非常有趣,謝謝! – lawls

+0

我認爲轉移*實際* mouseclicks將是罕見的。而是這些點擊表明的意圖行動將被髮送(並經過驗證) – Textmode