2010-05-16 82 views
3

我正在編寫簡單的遊戲,我打算將多人遊戲(通過網絡)作爲我的大學項目。 我正在考慮客戶端 - 服務器通信的兩種情況:簡單的網絡遊戲,客戶端 - 服務器體系結構規劃

物理(它們很瑣碎!我應該稱之爲「碰撞測試」,實際上:))僅在服務器計算機上處​​理。因此,通信看起來像

Client1->Server: Pressed "UP" 
Server->Clients: here you go, Client1 position is now [X,Y] 
Client2->Server: Pressed "fire" 
Server->Clients: Client1 hit Client2, make Client2 disappear! 

服務器接收該事件,並將其應用到所有其他客戶端。

Client1->Server: Pressed "UP" 
Server->Clients: Client1 pressed "UP", recalculate his position!! 
[Client1 receives this one as well!] 

哪一個更好?或者,也許他們都不是? :)

回答

6

通常的方法是將該信息發送至:

  1. 玩家爲
  2. 在他是什麼時候有(使用遊戲內的時間觀念,未必實時)
  3. 的玩家的移動向量(方向和速度)

然後客戶端可以使用航位推算來估計其他玩家在哪裏,這樣網絡延遲就會減少對遊戲的干擾。只有當玩家改變其移動方向或移動速度時(其他客戶端無法預測),更新才需要發送,因此網絡帶寬也將得到保存。

以下是關於航位推測的一些鏈接。相同的網站可能還包含更多的文章。 http://www.gamasutra.com/view/feature/3230/dead_reckoning_latency_hiding_for_.php http://www.gamedev.net/reference/articles/article1370.asp

2

我認爲第一種方法更好。所以你在所有客戶端擁有相同的數據。

當物理簡單,計算結果總是相同時,第二種方法也可以。但是如果有可能的隨機數字,您將對所有客戶端產生不同的影響。

+0

那是我的第一個念頭,但後來我意識到我需要更新所有的客戶經常保持運動平滑(每個字符的行爲類似於橡膠球:彈跳,在不同的方向快速移動等等)。 – migajek 2010-05-16 17:48:05

相關問題