深度解析Windows Phone 7 開發
近兩年來,智能手機市場似乎已經成為iPhone、Android爭妍斗艷的舞臺,Windows Mobile因為老舊的構架,以及那些換湯不換藥的更新,越來越多的Windows Mobile用戶紛紛轉投其他智能手機平臺門下,其市場占有率現如今僅存8%的戰果,不但被iPhone拉下第三的寶座,就連Android 4%的市場份額也已逐漸逼近Windows Mobile。在這種前有狼后有虎的狀況下,微軟對其下一代智能手機平臺Windows Mobile 7的研發工作卻愈發地低調和沉默,就在各家手機硬件廠商和眾多Windows Mobile粉絲耐心磨盡前,微軟終于在虎年的大年初二(2 月15日)揭開了Windows Phone 7的廬山真面目。
Windows Phone 7 廬山真面目
從微軟在MWC透露的資料和視頻來看,我們知曉 Windows Phone 7 系統和以往的Windows Mobile真是做了徹頭徹尾的改進。Windows Phone7將從6大核心出發,分別是:People(聯系人)、Pictures(圖片)、Games(游戲)、Music + Video(影音)、Marketplace(軟件商店)與 Office(辦公)。操作上也發生了很多的改變,整個手機上只有三個按鈕:后退、開始、與搜索,觸摸屏與多點觸控已經成為Windows Phone 7首選的交互方式。并且首頁也已經改用圖標界面,可以說微軟已經徹底拋棄了以往 Windows Mobile 傳統的界面與設計理念。
作為Windows Mobile的開發人員,我則更加關注Windows Phone 7在開發技術和開發理念上的改變。早在2005年左右微軟就已經開始Windows Phone 7的規劃和研發,但是Windows Phone 7在開發6年之久依然遲遲未出,除了受到iPhone和Android的影響進行了重新設計外,還受到微軟各項技術向Windows Phone 7平臺的遷移戰略拖累。
Silverlight、XNA主導Windows Phone 7開發平臺
3月7號微軟官方博客已經公布了Mix10會議上14 場和 Windows Phone 7應用和游戲開發相關的Sessions。他們是:
“Changing our Game”之Windows Phone 7 Series介紹
開發 Windows Phone 游戲
開發高性能3D Windows Phone游戲
富移動網站的設計與開發
Windows Phone 7 Series應用平臺概覽
Windows Phone用戶界面及設計語言
Microsoft Silverlight應用開發介紹
開發基于Silverlight的Windows Phone應用(第一部分)
開發基于Silverlight的Windows Phone應用(第二部分)
Windows Phone應用平臺架構
Windows Phone的XNA游戲開發及調試工具
Windows Phone應用和游戲的分發和盈利
Windows Phone的Silverlight性能
Silverlight 及 Windows Phone 7 應用的單元測試框架
由此可知Silverlight、XNA將成為Windows Phone 7在應用和游戲方面的主要開發方式。在以往的Windows Mobile應用程序開發上,如何實現一個較好的界面呈現對程序員來說是非常頭痛的事情。在微軟提供的.Net Compact Framework開發方式上,內置的控件不但實用性較差,而且在控件的呈現效果也非常簡陋,微軟對此的解釋美其名曰是希望開發人員對所缺乏的控件進行自定義擴展。但是自定義控件對于大多數程序員來說是個可望不可即的技術活,而iPhone和Android之所以在界面呈現上遠勝于Windows Mobile,就是因為這兩個開發平臺在創建起始就為程序員提供了大量功能強大、靈活度高且設計精美的內置控件,為此開發人員就可以將精力專注于應用程序的邏輯設計和界面布局上,不用再糾纏于控件的設計和編碼上。
慶幸的是Windows Phone 7的研發人員終于意識到這個問題,為此Silverlight被引入了Windows Phone 7平臺。Silverlight對于很多只專注于Windows Mobile的開發人員來說似乎有點陌生,為此筆者這里簡單解釋下Silverlight相對應傳統的Windows Form開發的巨大優勢。在Silverlight中主要是使用一種名為XAML的標記語言和布局界面和設置控件,XAML不但在界面界面上極具靈活性,而且相對應傳統的編程語言實現界面來說,亦是簡便了許多。
拿一個最簡單的例子來說,在.Net Compact Framework中,Button可謂是我們最常用的控件之一,但是Button控件的功能可謂是非常雞肋,不能為按鈕添加圖片背景就是一個硬傷,更別提按鈕的懸停、按下、釋放效果,以及按鈕的梯度顏色漸變等功能支持了。因此最簡單地設置一個Button按鈕,最起碼也是需要如下的C#代碼支持:
myBtn.Background = Color.Green;
myBtn.Text="Submit";
myBtn.Click += new System.EventHandler(OnClickHandler);
而對于XAML僅需一行代碼可以將上面的代碼化繁為簡:
如果XAML這種化繁為簡的本事還不足稱道的話,那么你想象過在一個按鈕控件中實現動畫效果,以及作為容器添加其他控件的能力嗎?XAML為構建僅受限于想象力的程序界面提供了強有力的支持。為此在Windows Phone 7的應用程序開發上, XAML的引入將成為必然,Windows Phone 7的應用程序界面效果將和傳統的Window Mobile程序那種有棱有角和千遍一律的界面存在明顯的區別。
Zune HD版的facebook采用XAML布局的界面效果
3月7號在 TechEd 中東會議的主旨演講上,微軟演示了一款跨 Windows 7, Windows Phone 7 Series 和 Xbox 360 平臺的冒險類游戲:在 Windows Phone 7 上繼續 Windows 7 保存的游戲,最終在 Xbox 360 上完成任務,這聽起來是不是非常震撼。手機、PC、Xbox之間的通用游戲和通用存檔意味著什么,意味著我們可以在地鐵或者公交上使用Windows Phone 7隨時隨地游戲外,而后還可以將Windows Phone 7上的游戲存檔通過網絡直接上傳到游戲體驗效果更好的Xbox 360或者PC上“再續前緣”。
跨 Windows 7, Windows Phone 7 Series 和 Xbox 360 平臺的冒險類游戲—Platformer
而實現上面這一切都源于在Windows Phone 7平臺上引入的XNA游戲框架。XNA起源于游戲界大名鼎鼎的DirectX,是微軟對于C#版DirectX的修正和擴充版本。起初該工具也只是面向業余游戲程序員所設計的游戲開發套件。第一版的XNA只支持Xbox和PC兩個平臺,在XNA 3.1版中又引入了對Zune的支持。但是XNA遲遲未表態何時支持Windows Mobile平臺,以至于眾多的游戲開發人員認為微軟又一次拋棄了Windows Mobile。現如今微軟終于給了我們一個定心丸,XNA將成為Windows Phone 7主要的游戲開發平臺。
XNA同以往的游戲開發套件相比,游戲的開發效率有巨大的提升,成本和時間亦大副縮短,這是XNA最大的優勢和賣點。其實XNA和眾多的.Net Compact Framework程序員來說可謂是同宗同源,因為XNA本身就是構架于.Net Compact Framework,只不過該版本的.Net Compact Framework為支持Xbox芯片進行相應的移植和優化。因此大多數.Net Compact Framework開發人員可以快速切入XNA的學習和開發,XNA的基礎庫也和Widows Mobile的.Net Compact Framework基本保持一致,只是額外添加了一些針對游戲開發相關的類庫,因此Windows Mobile開發人員在游戲開發上的學習和遷移難度極低,無需又一輪無根基的修煉過程。
除此之外,使用XNA的好處就是C#的快速開發優勢,縱觀現在Windows Mobile上的游戲開發方式主要有如下三類:
1、 Windows Mobile內置的DirectX Mobile、GAPI或GDI。
2、 Develant Technologies公司的GapiDraw套件
3、 OpenGL ES
現如今這些開發方式都已經有了相應的.NET版本封裝,于是乎越來越多的Windows Mobile游戲都開始采用C#+.Net Compact Framework以及上述套件進行開發,據筆者所知的就有Flight Commander、Tower Defense等數十款,而且游戲效果亦可與那些使用C++開發的游戲媲美。但是上面三種游戲開發方式各成體系,支持的功能也各有長短,因此選擇何種開發套件頗為為難。再者,OpenGL ES和GapiDraw并無官方版的.NET封裝,因此第三方的封裝不可避免地存在一些缺陷,導致游戲開發時才意識到問題。最后,就是這三種游戲開發方式的接口并不一致,所以我們每次都無法避免地需要重新地學習,開發經驗難以最大化地得到復用和積累。
.Net Compact Framework開發出的游戲效果
而有.Net Compact Framework 開發經驗的程序員在使用XNA開發游戲時雖然也存在一個重新學習過程,但是因為XNA底層封裝了游戲開發中常用和較復雜的實現,因此極大地簡化了游戲開發的難度。我們可以使用很少的代碼就可以實現游戲動畫、沖突檢測和場景的卷軸滾動等問題。除此之外,我們還開發的游戲無需太大的改動就可以運行在PC、Xbox、Zune和Windows Phone 7平臺上,一舉多得,何樂不為!