我的代码是
new GameFont(Content.Load<SpriteFont>("LoadingFont"), "LoadingFont")
根据我所读到的,您必须使用VS2010将您的资产编译为.xnb格式,我已经完成了,并将它们放入bin目录中的Content子文件夹,我也做过。但是,我收到错误消息“无法加载LoadingFont资产!”。
我不确定还能做什么。我读了一篇很老的帖子说使用XNA 4制作的资产不起作用,但我不知道是否仍然如此,或者如何将我的XNA版本改为3.1。
有什么想法吗?也许没有使用VS2010会有更好的方法吗?
答案 0 :(得分:11)
您是否已将内容添加到项目的Content文件夹中,并将Build Action设置为Content(在属性窗口中)。
我不确定使用.xnb格式的资产的过程是什么。我知道它可以这样做但我通常只是将原始图像和声音文件直接添加到我的Content文件夹中。尽管如此,Font可能会有点棘手。
编辑: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();
答案 1 :(得分:8)
我一直在VS2012中使用MonoGame而没有遇到任何麻烦; Content.Load<T>("myContent")
仍适用于我。最近一直困扰我的一件事(提示:在睡眠不足时不编码)是你必须在解决方案资源管理器中检查你的资产是否设置为“复制到输出目录”,否则当游戏构建时,资产不会与它一起使用,这就是你得到错误的原因 - 它无法加载那些不存在的东西!右键单击您的资产,然后在“属性”下查找。如果他们被设置为“不要复制”,那么你会想要改变它。
答案 2 :(得分:1)
喜欢@craftworkgames,我不能给你一个完整的答案。但XNA 3.1附带的传统内容管道已经进入4中。因此任何资产都需要加载略有不同的方式。例如,要加载.png资源以显示精灵,我会执行以下操作:
rock = Texture2D.FromStream(GraphicsDevice, TitleContainer.OpenStream(@"Rock-Large-Stones-PT.png"));
并正常将.png文件添加到解决方案中。我很确定这对于字体会有类似的东西,但我还没有完全弄明白;)
答案 3 :(得分:1)
我有同样的问题,不确定你是否已经解决,但这就是我所做的。
点击“内容”文件夹下的Monogame内容管道。
添加你的spritefont或纹理。
确保在Monogame内容管道中将操作从“构建”更改为“复制”
然后当你想简单加载内容时; texture = content.Load(“texture.png”);
希望这有帮助:)
答案 4 :(得分:0)
我遇到了类似的问题但是将'Windows 8 Store'作为目标平台......而Windows Open GL版本的一切都很好。 在Windows 8上,当我尝试使用content.Load(“Fonts / TestFont”)时,我收到“无法作为非内容文件加载”。
我用MonoGame.Windows8项目替换了我的解决方案中的MonoGame DLL(我从CodePlex下载了源代码)并进行了一些调试...并发现MonoGame在bin中查找Content文件夹... \ Debug \ AppX文件夹...在构建期间,Content文件夹被复制到不同的位置。因此,当我手动将Content文件夹复制到AppX文件夹时,错误已经消失,我的游戏原型现在正常工作。
我想我或者错过了与AppX相关的项目首选项中的一些设置(可能是Windows 8设备模拟器需要这个文件夹?)或者...... MonoGame应该在不同的地方寻找Content文件夹...无论如何我将暂时手动更新Content文件夹,因为它在编译期间被复制到错误的位置。
我的项目中有Content文件夹并且构建操作设置正确(内容)...并且选择了'复制始终'但在构建(编译)期间将Content文件夹复制到Debug文件夹,同时应将其复制到Debug \ AppX文件夹,否则MonoGame找不到它。 (我可能错误的确切路径,因为我目前正在工作,问题出在我的家用电脑上)
可能只是我的Visual Studio 2012中的一些配置问题。
希望这些信息有所帮助。