无法将资源作为非内容文件加载
本文关键字:文件 加载 资源 | 更新日期: 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"