2013-01-24 58 views
7

我的代碼是無法獲取的內容使用Monogame加載與VS2012

new GameFont(Content.Load<SpriteFont>("LoadingFont"), "LoadingFont")

據我讀過,你必須使用VS2010編譯你的資產注入.xnb格式,這是我已完成,並將它們放到bin目錄中的Content子文件夾中,這也是我完成的。但是,我收到一條錯誤消息:「無法加載加載字體資源!」。

我不太確定還有什麼要做。我讀過一篇很老的文章,稱使用XNA 4製作的資產將無法工作,但我不知道這是否仍然如此,或者如何將我的XNA版本更改爲3.1。

任何想法?也許有沒有更好的方式使用VS2010呢?

+0

什麼平臺是你的目標? Windows 7或更低版​​本,Windows 8等。最新版本的MonoGame獲得XNA 4.0兼容性,因此您不想回到XNA 3.1。 – borrillis

回答

11

您是否已將內容添加到項目的「內容」文件夾中,並將「構建操作」設置爲「內容」(在屬性窗口中)。

我不完全確定使用.xnb格式資產的過程是什麼。我知道可以這樣做,但我通常只是將原始圖像和聲音文件直接添加到我的內容文件夾中。字體雖然可能有點棘手。

編輯:2015年

很多事情已經改變,因爲這個問題被寫。目前,MonoGame擁有自己的Pipeline tool用於將內容處理爲XNB文件。首先要嘗試使用新的管道來處理SpriteFont。這樣可以避免完全依賴XNA。

或者,解決MonoGame中字體問題的另一種方法是使用BMFont工具將它們預渲染到紋理,並使用MonoGame.Extended在遊戲中渲染它們。

一旦您已經installed MonoGame.Extended,您可以加載使用BMFont創建的字體,就像您使用SpriteFont一樣,但使用BitmapFont類代替。

_bitmapFont = Content.Load<BitmapFont>("my-font"); 

然後渲染一些文字,像這樣:

_spriteBatch.Begin(); 
_spriteBatch.DrawString(_bitmapFont, "Hello World", new Vector2(100, 200), Color.Red); 
_spriteBatch.End(); 

我有一個full tutorial on my blog

+1

這是非常多的。顯然他們改變了如何在一個版本的Monogame中做到這一點,只需要在/ bin /內容中實際上必須在解決方案中。將其添加到解決方案中修復它:) – NibblyPig

+4

將文件本身的Build Copy屬性設置爲「Copy if Newer」,爲我工作。 – Mastro

+0

@ ashes999我更新了一個有效的鏈接。從2013年起,當這個問題被問到時,情況有所改變。 – craftworkgames

1

像@craftworkgames我不能給你一個完整的答案。但是隨着XNA 3.1的傳統內容管道已經進入了4.所以任何資產都需要加載一個稍微不同的方式。例如,要加載.png資源以顯示精靈,我執行以下操作:

rock = Texture2D.FromStream(GraphicsDevice, TitleContainer.OpenStream(@"Rock-Large-Stones-PT.png")); 

並像往常一樣將.png文件添加到解決方案中。我很確定這將是類似的字體的東西,但我還沒有弄清楚它或者;)

8

我一直在VS2012中使用MonoGame沒有任何問題; Content.Load<T>("myContent")仍然適用於我。有一件事近來一直困擾我(提示:在睡眠剝奪時不要編碼)是因爲您必須檢查您的資產在解決方案資源管理器中設置爲「複製到輸出目錄」,否則當遊戲生成時,資產不會隨之而來,這就是爲什麼你會得到這個錯誤 - 它不能加載那些不存在的東西!右鍵單擊您的資產並在Properties下查找。如果他們設置爲「不要複製」,那麼你會想改變它。

+0

在Windows上開發時,這一切都很好,但不適用於其他平臺(例如Android,IOS,Win8) – nathanchere

+1

我需要聽到的是「提示:不要在睡眠不足時編碼」,然後它會打我^ ^謝謝! – BjarkeCK

0

我有類似的問題,但與'Windows 8商店'作爲目標平臺...雖然一切都很好,與Windows Open GL版本。 在Windows 8上,當我嘗試content.Load(「Fonts/TestFont」)時收到「無法加載爲非內容文件」。

我用MonoGame.Windows8項目(我從CodePlex下載了源代碼)替換了我的解決方案中的MonoGame DLL,並且我做了一些調試......並且發現MonoGame在bin中查找Content文件夾... \ Debug \ AppX文件夾......在構建過程中,將Content文件夾複製到不同的位置。所以當我手動將Content文件夾複製到AppX文件夾時,錯誤消失了,現在我的遊戲原型正常工作。

我想我錯過了與AppX相關的項目偏好設置中的一些設置(推測這個文件夾是Windows 8設備模擬器需要的?)或者... MonoGame應該在不同的地方尋找內容文件夾...... Anyway我現在將手動更新Content文件夾,因爲它在編譯過程中被複制到錯誤的位置。

我在我的項目中有內容文件夾並且構建操作設置正確(內容)...並且選擇了「始終複製」,但在生成(compliation)過程中將內容文件夾複製到調試文件夾,同時應將其複製調試\ AppX文件夾,否則MonoGame找不到它。 (我也許錯了詳細的路徑,因爲我現在在上班,問題是在我的家用電腦)

也許這只是一些配置問題在我的Visual Studio 2012

希望這個信息幫助。

1

我有同樣的問題不知道如果你得到它解決或不,但這是我做了什麼。

單擊「內容」文件夾下的Monogame內容管道。

添加您的spritefont或紋理。

請確保您從改變行動Monogame內容管道當你想簡單地加載內容「建設」到「複製」

即可; texture = content.Load(「texture.png」);

希望這有助於:)