[Windows8|Monogame]在Windows8的Monogame專案下載入Content

Published: 09/26/2013, Last Updated: 09/26/2013

前言

前文中雖然告訴了大家如何開啟可以在Visual Studio 2012上開發、可在Windows 8執行的Monogame專案,但是仍有一些事情需要解決,就是使用、載入Content資產資源的部分,因為我們需要音效、需要能夠顯示遊戲圖像的圖片都需要放在Content。

 

Monogame上的Content 

雖然Monogame已經想盡辦法把讓開發者可以在Windows 8上開發XNA,但仍然有些無法相容的部分-Content,Content在XNA中是存放所有遊戲會使用到的相關資源檔如:遊戲用的圖片、遊戲的音效、文字等類型的項目資產,並透過編譯產生XNA所引入使用的xnb格式檔案。

開發XNA遊戲需要透過Content來找到資源路徑引入相關資源並建置出Xnb檔案供執行時使用,而Monogame雖然可以處理xnb的檔案格式,但是卻無法自己透過編譯產生xnb檔案(不過這部分未來可能會解決),於是這也是這篇文章的主要目的,我們需要透過一些迂迴的方式來達到使用載入這些資源的方法,讓我們來跟著一下步驟:

 

 

1.加入Windows Phone Library

由於我們無法在Monogame上建置出Xnb檔案,所以我們要借助XNA來幫我們建置,但是我們之前有提到XNA已經不支援在Visual Studio 2102上開發、Windows 8 上執行了,那我們又要怎麼使用XNA呢? 


這時候我們就要借助Windows Phone SDK 8啦,因為開發Windows是的,安裝Windows Phone SDK 8後你的Visual Studio 2012就會出現XNA Game Studio的選項(因為Windows Phone SDK 8中仍然包含開發Windows Phone 7.5,而開發Windows Phone 7.5的遊戲仍然是使用XNA來開發),而我們就借用Windows Phone Library來作為我們Monogame專案的相依性參考專案,在這邊我們命名為DummyLibrary

 

在這邊我們只需要用到Windows Phone Library來為我們編譯出Xnb檔案,所以Class可以移除掉不用。

 

 

2.加入Windows Phone用的Empty Content

為什麼我們要加入這個Content?因為不透過這個Content專案便無法到出編譯出Xnb檔案的動作,我把它命名為HelloContent

 

這時候在你的方案下就會包含:Monogame專案、Windows Phone Libray專案與XNA的Content專案。

 

 

3.對DummyLibrary專案(Windows Phone Library)右鍵->做新增內容參考,並把HelloContent參考過來

因為我們在開發一般的XNA框架遊戲時都會需要用到Content專案來為我們加入資源,之後整個方案在編譯時,便會透過Content把資源編成Xnb檔案並放置到XNA的遊戲專案,供XNA遊戲執行時可以取得Xnb當案並載入資源使用。

而一般XNA專案是預設把遊戲專案與Content專案繫在一起,但在這邊我們由於是使用Windows Phone Library所以需要手動繫在一起。

 

參考後便會如下圖,DummyLibrary參考了Content專案

 

 

4.對Monogame專案加入相依性

把Monogame專案與DummyLibrary(Windows Phone Library)做一個相依性,這樣可以確保在編譯遊戲專案前先編譯DummyLibrary

 

5.編譯方案並取得Xnb檔案

在這邊我們先加入一張圖片到HelloContent中並對方案做編譯

此時你便會看到DummyLibrary\Debug\HelloContent這個目錄下產生了Xnb檔案(而這也是我們需要的! 有了他Monogame便可以載入圖檔資源!!)

 

 

6.在Monogame專案中新增Content資料夾,並把剛剛的Xnb檔案加入為連結!

為什麼是加入連結呢?因為這樣資後檔案改變時,透過連結便可以拿到改變後的圖檔Xnb

 

再來我們對著編譯好並加入到Content的連結Xnb檔案做右鍵->屬性->建置,改成內容,代表他是Content這樣Monogame才會把他認為Content

 

透過上述的相依性指定DummyLibrary,而DummyLibrary又參考HelloContent專案,以後只要把圖片放入HelloContent並做一個編譯動作時,由於Monogame專案是相依DummyLibrary,便會先建置DummyLibrary,並由HelloContent編譯出Xnb檔案,而我們在透過建置加入連結Xnb並設定建置為內容來讀取Xnb檔案加入資源!

 

結論

雖然以上的步驟繁瑣,但是Monogame仍然有其使用的好處

1.開發一次、跨平台性執行,使用Monogame的專案仍然可以上架

2.加入採用了資源豐富、適合學習遊戲邏輯開發的XNA框架(本人認為)

所以仍然是可以把Monogame作為一個開發遊戲時使用的框架考量

 

 

參考資料

MonoGame For Windows 8 Step 2 – Content

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804