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

本文关键字:文件 加载 资源 | 更新日期: 2023-09-27 18:17:56

为什么这种情况不断发生?我研究了一下,知道它们有帮助。代码:

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);
    }
}
}

我需要得到这个修复,所以我可以记住它。我不知道怎么做这件事,我需要别人的帮助。所以我需要帮助,来了解我做错了什么。

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

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

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

由此可能产生的其他问题是,如果您使用的是Visual Studio,则文件可能不会被复制到输出中。您需要选择文件和打开属性,选择copy以输出,并将其设置为newer或always。

最后是文件本身的文件格式。如果它不是。xnb,那么它不太可能被接受。xnb文件是由XNA或Monogame内容管道项目创建的。在XNA中,所有文件都必须转换为这种格式,但是Content Pipeline为您完成了转换。在Monogame中,有些文件可以直接加载,但它们因操作系统而异。我记得Windows可以同时接受。png和。wav文件。我记不起其他可接受的文件格式,而且在找到上次搜索时看到的方便表格时遇到了麻烦。

因此,游戏实际上希望加载的内容要么是"内容/角色/BlueAnvil"。xnb" 或"Content/Character/BlueAnvil.png"

编辑:虽然我发布这个答案已经有一段时间了,它仍然是真实的,我觉得我应该提到一夫一妻制现在已经删除了ContentManager加载非。xnb文件的能力,如。png和。wav。但是,它确实具有通过Texture2D等方法加载这些文件的功能。FromStream (graphicsDevice,文件流)。这才是你应该用的。

你的游戏应该在项目中有一个"Content"目录。在该目录中,您应该放置您的内容资产,如图像- BlueAnvil.png。然后你应该在游戏脚本中设置内容目录为"content":

Content.RootDirectory = "Content";

之后,在游戏的LoadContent()方法中,你必须加载资产:Content.Load<Texture2D>("Character/BlueAnvil"),它应该拉入你的纹理,前提是你已经将BlueAnvil文件设置为上面提到的内容。XS应该在构建项目时执行"优化png"步骤。

内容文件夹在资源包中结束,monogame将从中提取并创建您所请求的Texture2D对象。

我的content文件夹中的一个jpg文件遇到了这个问题。我将该文件的"copy to output directory"属性改为"copy if newer"右键点击图片- properties

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

path = "Character/BlueAnvil"

修改:

path = "Character//BlueAnvil"

path = @"Character/BlueAnvil"