我刚刚开始使用MonoGame,每当我运行程序时,我都会收到一个无法加载资产作为非内容文件错误。我一直在网上搜索,但没有发现任何问题。请帮忙!
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
namespace MoveDemo
{
public class MainGame : Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D mainmenu;
public MainGame()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
base.Initialize();
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
mainmenu = Content.Load<Texture2D>("MainMenu");
}
protected override void UnloadContent()
{
}
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
spriteBatch.Begin();
spriteBatch.Draw(mainmenu, new Rectangle(0, 0, 840, 480), Color.White );
spriteBatch.End();
base.Draw(gameTime);
}
}
}
答案 0 :(得分:2)
你肯定可以像@SBurris那样这样做,但我会建议一个更简单,更全面的解决方案来解决这个问题:
原因:
因此,当您尝试在Visual Studio中调试项目时,会得到一个ContentLoadException
,它告诉您无法将资产作为非内容文件加载。你问的是什么content file
? content file
是包含已编译资产的二进制文件,扩展名为.xnb
。指定资产的路径(例如纹理)时,如下所示:
protected override void LoadContent()
{
this.Content.Load<Texture2D>("path/to/myTexture");
}
您实际上并未链接到纹理的.png
文件,而是链接到包含所需数据的.xnb
内容文件。该异常只是告诉您在指定目录中找不到内容文件(.xnb
)。
解决方案:
要解决此问题,只需打开MonoGame Content Builder/Pipeline tool
,它位于项目目录中名为Content
的文件夹中。管道工具本身也称为Content
(或Content.mgcb),并且有MonoGame的橙色标志作为它的图标。
完成上述操作后,右键点击Content Project
,将所需资产添加到Content
(默认称为-> Add -> Existing Item
)。
然后你保存完成!错误。为了编译内容文件并准备使用,您需要首先create
。通过点击Build menu
并选择Build
或者按键盘上的F6来完成该操作。
这会将asset file
编译成content file
给你,你的游戏就可以阅读了。
<强> XNA:强>
当我第一次使用MonoGame时,我有使用Microsoft的XNA的经验,当我发现MonoGame使用不同的方法为项目添加资产时,我遇到了和你一样的问题。那是因为我习惯了XNA方式,只允许我Add -> Existing item
而忘记它 - Visual Studio会自动为我编译资产文件。嗯,MonoGame不再是这种情况,所以请记住从Content Project
建立Content Pipeline tool
!
干杯!
答案 1 :(得分:1)