Monogame:无法将资产作为非内容文件加载

时间:2017-01-23 00:47:16

标签: c# monogame

我刚刚开始使用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);
    }
}
}

2 个答案:

答案 0 :(得分:2)

你肯定可以像@SBurris那样这样做,但我会建议一个更简单,更全面的解决方案来解决这个问题:

原因:

因此,当您尝试在Visual Studio中调试项目时,会得到一个ContentLoadException,它告诉您无法将资产作为非内容文件加载。你问的是什么content filecontent 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)

您是否告诉Visual Studio MainMenu是内容并复制它?

enter image description here

在我的情况下,由于CarBlue位于内容下的Graphics文件夹中,我使用此行加载它:

blueCarSprite = Content.Load<Texture2D>(@"Graphics\CarBlue");