首先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是比較適合的。


http://creators.xna.com/en-US/news/gdc2010
微軟在2010年的GDC會上發表Windows Phone 7,其中最令人矚目的就是XNA 4.0將支援該平台,蘋果已經在手機遊戲市場打下一片江山,微軟在後面苦苦追趕,XNA可能成為Windows Phone的秘密武器,如果還是無法吸引大量開發者投入其陣營,未來要急起直追只會更加困難,XNA使用C#語言比起iPhone的Objective C開發起來更有效率,且XNA4.0號稱可與XBOX Live互動,至於多大的互動就不得而知了,另外也會整合進Visual Studio 2010,讓開發工具更完整。

上面圖片就是一款微軟在大會上展示的一款遊戲,名為”The Harvest”,據說架構到XNA上花了三個禮拜的時間,真是不能小看微軟開發架構的威力,期待未來還能有更多資訊與詳細規格的發佈。

另外之前提到的專門將.Net framework port到iPhone上的MonoTouch,新版本支援預購火熱的iPad,並且已經在製作MonoDroid,表示未來在Android平台上使用.Net語言,這就表示如果未來XNATouch也做個port到android的版本,將可實現橫跨PC、Xbox360、iPhone、Android、Zune、Windows Mobile等跨平台的夢想,比Unity還強大(這句是玩笑話,Unity是完整的開發工具,XNA僅是程式框架,不可與之相提並論)。
sample code:

http://create.msdn.com/en-US/education/catalog/sample/network_cs

By admin-powenko

Dr. Powen Ko is a teacher and CEO on LoopTek LLC, and like to teaching. if you need to class, please let PowenKo know, he will love to service and sharing. LoopTek web site is www.looptek.com

Leave a Reply