C# MonoGame帮助?(Content.Load<Texture2D>("Invader");)

3

我正在使用MonoGame中的OpenGL创建一个太空侵略者游戏,我试图加载一个我已经添加到Content文件夹中的纹理(它是一个名为“Invader”的PNG文件)
我使用的代码如下:

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

然而,当我尝试运行它时,它显示出以下信息:

未处理的ContentLoadException
无法将Invader加载为非内容文件!


我认为在MonoGame中内容管理器并没有完全实现。如果您分享更多的代码,我可能能够提供更多帮助。 - ZeroPhase
3个回答

4

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

实际上,您可以直接加载已添加到Content文件夹中的PNG内容,如下所示:

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

请注意,在某些平台上,文件名区分大小写,因此要小心确保完全匹配。另外,请确保在属性窗口中将文件设置为内容/复制(如果较新)。
另一种选择是使用XNA Game Studio Content PipelineMonoGame Content Pipeline将资源编译成优化的二进制XNB文件。这将提供更好的性能,但会增加额外的开发工作量。
我还应该提到,在呈现原始PNG文件时,应在调用SpriteBatch.Begin时使用BlendState.NonPremultiplied以获得最佳效果。我已经在我的游戏中使用了这种方法一段时间了,并且对结果感到非常满意。

2
你不应该使用扩展名。Monogame会首先查找.xnb文件,如果找不到它们,则会回退到已知的本地格式(如果支持)。在这里查看 - josaphatv
1
我进行了更正,扩展名不是必需的。我发誓几个月前我尝试过这个方法,但当时它没有起作用,现在它可以了,所以我为之前误导您而道歉。 - craftworkgames

1
MonoGame没有完全实现内容管理器。通常,您需要单独构建内容,并将构建好的内容文件导入到您的项目中。然后您可以像往常一样加载它们。
要构建内容文件,您可以使用XNA或MonoGame内容构建器,例如this one。如果您愿意,您也可以使用命令行作为项目构建过程的一部分,以便自动构建内容。

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

1

确保你所涉及的 .png 文件的构建操作设置为内容。右键单击该文件,然后选择属性来进行设置。


+1 是因为这正是问题所在。另外,请确保将操作设置为“如果较新则复制”或“始终复制”。 - josaphatv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接