如何在開發Windows8的Monogame時使用Content資源
在前文中雖然告訴了大家如何開啟可以在Visual Studio 2012上開發、可在Windows 8執行的Monogame專案,但是仍有一些事情需要解決,就是使用、載入Content資產資源的部分,因為我們需要音效、需要能夠顯示遊戲圖像的圖片都需要放在Content。
前言
在前文中雖然告訴了大家如何開啟可以在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中並對方案做編譯(方案建置)
此時HelloContent的資源便會透過建置時,DummyLibrary的參考而去編譯成Xnb檔案
此時你便會看到DummyLibrary\Debug\HelloContent這個目錄下產生了Xnb檔案(而這也是我們需要的! 有了他Monogame便可以載入圖檔資源!!)
6.在Monogame專案中新增Content資料夾,並把剛剛的Xnb檔案加入為連結!
為什麼是加入連結呢?因為這樣資後檔案改變時,透過連結便可以拿到改變後的圖檔Xnb,而不需要再重新加入Xnb檔案
1.新建Content資料夾
2.加入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
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)
另外要轉載請附上出處 感謝