【问题标题】:Can't get content to load using Monogame with VS2012无法使用带有 VS2012 的 Monogame 加载内容
【发布时间】:2015-10-12 06:31:14
【问题描述】:

我的代码是

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

根据我阅读的内容,您必须使用VS2010将您的资产编译为.xnb格式,我已经这样做了,并将它们放入您的bin目录中的Content子文件夹中,我也这样做了。但是,我收到一条错误消息“无法加载 LoadingFont 资源!”。

我不太确定还能做什么。我读过一篇很老的帖子,说使用 XNA 4 制作的资产将不起作用,但我不知道这是否仍然正确,或者如何将我的 XNA 版本更改为 3.1。

有什么想法吗?也许根本不用VS2010有更好的方法?

【问题讨论】:

  • 您的目标是什么平台? Windows 7 或更低版本、Windows 8 等。最新版本的 MonoGame 正在获得 XNA 4.0 兼容性,因此您不会想回到 XNA 3.1。

标签: c# monogame


【解决方案1】:

您是否已将内容添加到项目的 Content 文件夹并将 Build Action 设置为 Content(在属性窗口中)。

我不确定使用 .xnb 格式的资产的流程是什么。我知道可以这样做,但我通常只是将原始图像和声音文件直接添加到我的 Content 文件夹中。不过,字体可能会有点棘手。

编辑:2015

自从写下这个问题以来,很多事情都发生了变化。如今,MonoGame 拥有自己的Pipeline tool,用于将内容处理成 XNB 文件。首先要尝试的是使用新管道处理您的SpriteFont。这样您就可以避免完全依赖 XNA。

另外,解决 MonoGame 中字体问题的另一种方法是使用 BMFont 工具将它们预渲染为纹理,然后使用 MonoGame.Extended 在游戏中渲染它们。

一旦您拥有installed MonoGame.Extended,您就可以像加载SpriteFont 一样加载使用BMFont 创建的字体,但改用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

【讨论】:

  • 差不多就是这样。显然,他们改变了如何在 Monogame 的一个版本中执行此操作,从只需要在 /bin/content 中更改为实际上必须在解决方案中。将它添加到解决方案中修复了它:)
  • 将文件本身的 Build Copy 属性设置为“Copy if Newer”,对我有用。
  • @ashes999 我将链接更新为有效的链接。自 2013 年提出这个问题以来,情况发生了一些变化。
  • @ashes999 在我的辩护中,我更新了手机中的链接,并且多年来我没有写过仅链接的答案。返回并更新我所有的旧答案将非常耗时,但是当它们出现时我很乐意这样做。我已经为此添加了更多细节,希望不会丢失原始答案的上下文。
  • @craftworkgames 不用担心。你的回答(这里)在谷歌上排名很高,而且你有很多代表,所以我认为这个具体案例会从更多细节中受益。干杯。
【解决方案2】:

我一直在VS2012中使用MonoGame,没有遇到任何问题; Content.Load&lt;T&gt;("myContent") 仍然对我有用。最近引起我注意的一件事(提示:睡眠不足时不要编码)是您必须检查您的资产是否在解决方案资源管理器中设置为“复制到输出目录”,否则当游戏构建时,资产不会随之而来,这就是您收到该错误的原因 - 它无法加载不存在的内容!右键单击您的资产并在“属性”下查看。如果它们设置为“请勿复制”,那么您需要更改它。

【讨论】:

  • 在 Windows 上开发时这一切都很好,但不适用于其他平台(例如 Android、IOS、Win8)
  • 我需要听到的只是“提示:睡眠不足时不要编码”,然后它击中了我^^谢谢!
【解决方案3】:

就像@craftworkgames 我不能给你一个完整的答案。但是 XNA 3.1 附带的传统内容管道已经进入 4。所以任何资产都需要以稍微不同的方式加载。例如,要加载 .png 资源以显示精灵,我执行以下操作:

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

并像往常一样将 .png 文件添加到解决方案中。我很确定字体会是类似的东西,但我还没有完全弄清楚;)

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,不确定你是否解决了,但这是我所做的。

    单击“内容”文件夹下的 Monogame 内容管道。

    添加你的 spritefont 或纹理。

    确保在 Monogame 内容管道中将操作从“构建”更改为“复制”

    然后当你想简单地加载内容时; 纹理 = content.Load("texture.png");

    希望这会有所帮助:)

    【讨论】:

      【解决方案5】:

      我遇到了类似的问题,但使用“Windows 8 Store”作为目标平台......而 Windows Open GL 版本一切正常。 在 Windows 8 上,当我尝试 content.Load("Fonts/TestFont") 时收到“无法作为非内容文件加载”。

      我将解决方案中的 MonoGame DLL 替换为 MonoGame.Windows8 项目(我从 CodePlex 下载了源代码)并进行了一些调试...发现 MonoGame 在 bin 中查找 Content 文件夹...\Debug \AppX 文件夹...在构建过程中,内容文件夹被复制到不同的位置。因此,当我手动将 Content 文件夹复制到 AppX 文件夹时,错误消失了,我的游戏原型现在可以正常工作了。

      我想我要么错过了与 AppX 相关的项目首选项中的一些设置(大概 Windows 8 设备模拟器需要这个文件夹?)或者...... MonoGame 应该在不同的地方寻找 Content 文件夹......无论如何我暂时将手动更新 Content 文件夹,因为它在编译期间被复制到错误的位置。

      我的项目中有 Content 文件夹,并且构建操作设置正确(内容)...并且选择了“始终复制”,但在构建(编译)期间,内容文件夹被复制到 Debug 文件夹,而它应该被复制到Debug\AppX 文件夹,否则 MonoGame 找不到它。 (我可能对确切路径有误,因为我目前正在工作,问题出在我的家用电脑上)

      也许这只是我的 Visual Studio 2012 中的一些配置问题。

      希望这些信息对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多