2.4在Xbox 360上試試
好了,遊戲已經完成了,而且在Windows平台上也做了很多測試。就像我在第一章中解釋的那樣,要在Xbox 360上配置並運行XNA Framework需要幾個關鍵步驟。如果Xbox 360上的XNA Game Launcher已經啟動,您可以試著編譯您的XNA Pong遊戲並把它部署到控制台。
對於Xbox 360有特別重要的幾點要謹記:
- 如非必要不要使用任何外部DLL——雖然使用XNA Game DLL是可以的,但大多數Windows平台上的DLL都會調用Windows的系統DLL檔案,而這些系統DLL檔案在Xbox 360平台是無法使用的,而且更糟的是,出於安全考慮在Xbox 360平台上是不支援使用指標方式(P-Invoke)調用非託管DLL檔案的。另外,也不要使用非安全的程式碼或者試圖調用外部代碼、訪問裝置,或者使用不支援的特性,這樣做純粹是浪費時間,您做好按照規則行事。
- Don’t wait with the testing——開發項目的時候,如果您把輸出設定更改到Xbox 360上,您要測試您的代碼是否能正常編譯,因為您習慣使用的很多方法在Xbox 360上是不存在的。比如,在Xbox 360上動態庫System.dll中是沒有TryParse方法的,還有一些XNA方法和類(例如MouseState類)根本就不受支援,也不存在。
- 不要直接載入內容——在Windows平台上,藉助Texture2D或CompiledEffect構造器您可以直接載入textures和shaders。而在Xbox 360上這些方法是不存在的,您只能使用內容管道來載入內容。如果您使用動態載入或重新載入textures和shaders代碼的話,它們也只能在Windows平台上工作,所以為Xbox 360構建程式的話要使用標記 #if !XBOX 360…#endif 把這些程式碼封裝含起來。
- 儲存遊戲並載入其他內容——要儲存遊戲您可以使用Content命名空間以及其他很多輔助類。藉助StorageContaine.TitleLocation(這在Windows平台也可以使用,而且就使用輸出檔案夾)載入內容您要始終確保使用了正確的路徑,從Xbox 360其他位置載入會導致拒絕訪問(Access Denied)異常。
- 測試解析度——Xbox 360支援很多個人電腦上的解析度方案,所以您至少要測試2到3種來保證遊戲可以正常運行。
- 允許使用Gamepad操作一切——關於這一點,我所見過的大多數XNA遊戲都犯了一個錯誤,它們要麼只支援鍵盤輸入或者只支援Gamepad輸入,這也就意味著它們要麼只能運行在Windows上,要麼只能運行在Xbox 360上。支援足夠多的裝置對您的遊戲來說是非常有意義的。
- 在Xbox 360上進行調試和單元測試——在Xbox 360控制台上進行調試和單元測試與在Windows平台上的沒有什麼區別,可以使用相同的規則。或許跟蹤錯誤和記錄錯誤資訊有點難,但使用XNA還是可以進行單步調試和測試單元測試。要好好利用這一點。順便說一句:在Windows平台上,調試的時候如果修改了代碼仍然可以繼續執行,但是對於Xbox 360遊戲卻不能。這一點很不爽,不過一般您都是在Windows平台上完成主要的開發。
這個XNA Pong遊戲在編碼時始終考慮到了Xbox 360,您使用的所有方法和特性在Xbox 360上都受支援。所以在Xbox 360上測試這個遊戲並不是什麼大問題,您可以直接部署它,然後運行它,2-11所示:
圖2-11
2.5挑戰:改進您的Pong遊戲
現在輪到您來對遊戲進行一些改進了,您可以換一換圖片或聲音,或者調整一下遊戲的玩法。如果您有Gamepad,您還可以添加Rumble支援,而且如果您讀本書的話,您的確應該有一個Gamepad控制器,即使您沒有Xbox 360。很多XNA遊戲都需要Xbox 360控制器,而且有些遊戲使用Xbox 360控制器會比使用鍵盤更好玩。
下面是為Gamepad添加Rumble支援的代碼:
GamePad.SetVibration(PlayerIndex.One, leftRumble, rightRumble);
當球撞倒球拍時,使用上述代碼讓控制器震動一會(leftRumble和rightRumble使用相同的值,這樣整個控制器就會震動)。當玩家失去一條命時也可以震動一下,這次時間可以長一些,並震動得強烈一些。
您可以查看本章的樣本項目,看看這裡的挑戰方案。您的挑戰方案不必和這相同,不過看一看還是有協助的,或許可以學習一下使用一種更簡單的方式來解決某個特定的問題。
好好享受您的XNA遊戲吧!