【问题标题】:C# MonoGame Help? (Content.Load<Texture2D>("Invader");)C# MonoGame 帮助? (Content.Load<Texture2D>("Invader");)
【发布时间】:2013-07-30 17:47:18
【问题描述】:

我正在 MonoGame 中使用 Open GL 制作 Space Invaders 游戏,我正在尝试加载已添加到 Content 文件夹中的纹理(这是一个名为“Invader”的 PNG 文件)
我使用的代码是:

invader = Content.Load<Texture2D>("Invader");

但是当我尝试运行它时它说:

ContentLoadException 未处理
无法将 Invader 作为 非内容文件!

【问题讨论】:

  • 我相信内容管理器在 MonoGame 中并没有完全实现。如果您分享更多代码,我可能会提供更多帮助。

标签: c# xml mono png monogame


【解决方案1】:

我正在尝试加载已添加到 Content 文件夹的纹理(这是一个名为“Invader”的 PNG 文件) 入侵者 = Content.Load("入侵者");

其实你可以像这样直接加载已经添加到Content文件夹的PNG内容:

invader = Content.Load<Texture2D>("Invader");

请注意,在某些平台上,文件名 区分大小写,因此请注意它完全匹配。此外,请确保您已在“属性”窗口中将文件设置为“内容/复制”(如果较新)。

另一种方法是使用XNA Game Studio Content PipelineMonoGame Content Pipeline 将您的资产编译成优化的二进制XNB 文件。这将为您提供更好的性能,但会带来额外的开发开销。

我还应该提到,在将精灵渲染为原始 PNG 文件时,您应该在调用 SpriteBatch.Begin 时使用 BlendState.NonPremultiplied 以获得最佳效果。一段时间以来,我一直在我的游戏中这样做,我对结果非常满意。

【讨论】:

  • 你不应该使用扩展。 Monogame 将首先查找 .xnb 文件,如果找不到它们,则在支持的情况下使用已知的原生格式。 See here.
  • 我做了一个更正,不需要扩展。我发誓几个月前我试过了,但没有用,但现在可以了,所以我为之前的误导性答案道歉。
【解决方案2】:

MonoGame 没有完全实现内容管理器。通常,您单独构建内容,然后将构建的内容文件导入您的项目。然后你就可以像往常一样加载它们了。

要构建内容文件,您可以使用 XNA 或 MonoGame 内容构建器,例如 this one。如果您愿意,可以使用命令行作为项目构建过程的一部分,以便自动构建内容。

【讨论】:

  • 我相信有一个带有功能性内容管理器的分支。它可能是支持 PCL 的 MonoGame。我还没有使用过 MonoGame,但他们确实提到有一种方法可以实现它/我们可以开发内容管理器。让我看看我的笔记。
【解决方案3】:

确保您的构建操作设置为相关 .png 的内容。通过右键单击文件并选择属性来执行此操作。

【讨论】:

  • +1 因为这正是问题所在。此外,请确保将操作设置为“如果较新则复制”或“始终复制”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多