追蹤
兔子也會的遊戲設計
關於部落格
一個推廣XNA與OGRE的園地,當然還有其他關於遊戲設計的主題,歡迎有興趣的同好交流指教
  • 104845

    累積人氣

  • 0

    今日人氣

    0

    追蹤人氣

淺談XNA2.0網路架構

首先XNA Network 通訊協定使用Reliable UDP,也就是一種可信賴的UDP架構,也是國外
常看到的network lib所使用的協定。國內我看過的lib大多是用TCP,可能跟遊戲類型有關,
國外的遊戲大宗以FPS為主,在傳輸上求快不求準,國內以MMORPG為大宗,傳輸的可靠性
是首要考量。TCP與UDP協定有太多正反的論戰,這不是本篇的重點,事實上良好的交互運用,
也能達到不錯的效果。通常使用UDP作為協定的lib,都會實作四種傳輸方式;
(1)不可信賴、沒次序的傳送。
(2)可信賴、沒次序的傳送。
(3)不信賴、有次序的傳送。
(4)可信賴、有次序的傳送
顧名思義,可信賴就是會當一段時間對方收不到時就會重發直到送達目的地(所謂可信賴就是不保證的意思,也就是說並不保證在所有情況下封包一定會送達,不過正常情況下是一定會送達)。次序當然就代表傳送的先後次序是被固定的,才不會有先送後收的情形。
如果你要用到第四個選項,表示做的事情不會少於TCP協定,可以視不同需求來選擇採用的方式。
在XNA 2.0裡面,Senddata參數裡面就可以設定:SendDataOptions.None、SendDataOptions.Reliable、SendDataOptions.InOrder、SendDataOptions.ReliableInOrder。
詳細網路使用範例可以看官網的兩個範例
Client/Server
P2P
這兩個範例非常類似,看一下Code就可以了解。

現在要來說說限制了,如果想用XNA的network lib來做PC網路遊戲的可能要失望了,我找不到可以指定Server IP的地方,也就是說它是自動搜尋的方式來相互連結。
在程式碼中,我們可以看到
networkSession = NetworkSession.Create(NetworkSessionType.SystemLink,
                                                       maxLocalGamers, maxGamers);
其中參數NetworkSessionType.SystemLink就是用來指定連結的方式,
有Local、SystemLink、Ranked、PlayerMatch四種。主要用到的就是SystemLink與PlayerMatch,
System Link可以搜尋區網內所有已建立的Session,PlayerMatch當然就是XBOX Live 上的配對。
但是使用PlayerMatch在Live上配對可是要錢的,不只要金會員的資格還要有Creator Club的會員,
所以官方的建議似乎是說在本機端開發時,就先用SystemLink吧,但Intranet環境跟Internet不同,該怎麼模擬呢?
XNA提供了好用的方式:
NetworkSession.SimulatedLatency = TimeSpan.FromMilliseconds(200); 
NetworkSession.SimulatedPacketLoss = 0.1f;
第一行就是模擬封包的延遲時間,0.2秒。第二行就是封包遺失率,10%。
如何?挺方便的吧。

回頭想想。XNA的思維就是以PC跟XBOX連線為主,想用XNA做大型網路架構是不適合的。
當初在設計上就不是朝這個方向,而是類似Live的連線方式,所以如此的設計也就不覺得奇怪了。
假如想使用XNA設計MMORPG,使用.Net的Network物件,或是其他人封裝好的lib是比較適合的。



相簿設定
標籤設定
相簿狀態