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

时间:2014-08-13 01:06:39

标签: c# monogame

为什么会一直这样?我研究它并且知道它们有帮助。 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Security.Policy;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;

namespace Pratice
{
    public class CharacterClass
{
    public Texture2D texture;
    public Vector2 position, velocity;
    public Rectangle SourceRect;
    public string path;
    public bool HasJumped;

    public CharacterClass()
    {
        HasJumped = false;
        position = new Vector2();
        texture = null;
    }

    public void Initialize()
    {

    }

    public void LoadContent(ContentManager Content)
    {
        path = "Character/BlueAnvil";
        texture = Content.Load<Texture2D>(path);
    }

    public void Update(GameTime gameTime)
    {
        position += velocity;

        //input Controls
        KeyboardState keyState = Keyboard.GetState();
        if (keyState.IsKeyDown(Keys.A))
            position.X -= 5f;
        if (keyState.IsKeyDown(Keys.D))
            position.X = 5f;
        if (keyState.IsKeyDown(Keys.Space) && HasJumped == false)
        {
            position.Y -= 10f;
            velocity.Y = -5f;
            HasJumped = true;
        }

        if (HasJumped == true)
        {
            float i = 1;
            velocity.Y += 0.15f*i;
        }

        if (position.Y + texture.Height >= 450)
            HasJumped = false;

        if (HasJumped == false)
            velocity.Y = 0f;
    }

    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(texture, position, Color.White);
    }
}
}

我需要得到这个修复,所以我能记住它。了解如何做到这一点我需要帮助来做到这一点。所以我需要帮助,了解我做错了什么。

4 个答案:

答案 0 :(得分:7)

正如Nahuel Ianni在回答中所说,游戏从内容目录加载内容文件。因此,所有内容都应放在Content目录中。

换句话说,它所看到的实际路径是&#34; Content / Character / BlueAnvil&#34;。确保将文件放在正确的目录中。

可能由此产生的其他问题是,如果您使用的是Visual Studio,则可能无法将文件复制到输出中。您需要选择文件并打开属性,然后选择复制到输出并将其设置为更新或始终。

最后,文件本身有文件格式。如果它不是.xnb,则不太可能被接受。 .xnb文件由XNA或Monogame内容管道项目创建。在XNA中,所有文件都必须转换为此格式,但Content Pipeline会为您执行此操作。 在Monogame中,有些文件可以直接加载,但它们因操作系统而异。我不记得接受了.png和.wav文件。我无法回想起其他接受的文件格式,并且无法找到我上次搜索时看到的便携式桌面。

因此,游戏实际上要加载的是&#34; Content / Character / BlueAnvil.xnb&#34; 或&#34; Content / Character / BlueAnvil.png&#34;

编辑:虽然已经有一段时间我发布了这个答案,但它仍然大部分是真的,我觉得我应该提到Monogame现在已经删除了ContentManager加载非.xnb文件的能力,例如.png和.WAV。但是,它具有通过Texture2D.FromStream(graphicsDevice,fileStream)等方法加载这些文件的功能。这是你应该使用的。

答案 1 :(得分:5)

您的游戏应该在项目中有一个“内容”目录。在该目录中,您应该放置内容资源,例如图像 - BlueAnvil.png。然后你应该在游戏ctor中设置一个设置,你将内容目录设置为“内容”:

Content.RootDirectory = "Content";

之后在游戏的LoadContent()方法中,您必须加载资源:Content.Load<Texture2D>("Character/BlueAnvil")并且如果您已将BlueAnvil文件设置为内​​容,则应提取纹理,如上所述。在构建项目时,XS应该执行“优化PNG”步骤。

内容文件夹最终位于资源包中,将提取该资源包,并从中创建您请求的Texture2D对象。

答案 2 :(得分:4)

我的内容文件夹中的单个jpg文件出现此问题。我将该文件的“复制到输出目录”属性更改为“如果更新则复制”右键单击图片 - 属性

答案 3 :(得分:-1)

我在代码中看到一个问题。路径变量的字符串结构包括正斜杠:

path = "Character/BlueAnvil"

修订:

path = "Character//BlueAnvil"

path = @"Character/BlueAnvil"