Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将资源作为非内容文件加载_C#_Monogame - Fatal编程技术网

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

C# 无法将资源作为非内容文件加载,c#,monogame,C#,Monogame,为什么这种情况不断发生?我对它进行了研究,知道它们对我有帮助。 代码: 使用系统; 使用System.Collections.Generic; 使用System.Linq; 使用System.Net.Mail; 使用系统、安全、策略; 使用系统文本; 使用Microsoft.Xna.Framework; 使用Microsoft.Xna.Framework.Content; 使用Microsoft.Xna.Framework.Graphics; 使用Microsoft.Xna.Framework.

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

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Net.Mail;
使用系统、安全、策略;
使用系统文本;
使用Microsoft.Xna.Framework;
使用Microsoft.Xna.Framework.Content;
使用Microsoft.Xna.Framework.Graphics;
使用Microsoft.Xna.Framework.Input;
名称空间实践
{
公共类字符类
{
公共纹理2D纹理;
公共向量2位置、速度;
公共矩形SourceRect;
公共字符串路径;
公众的注意力已经跳跃;
公共字符类()
{
hasshopped=false;
位置=新矢量2();
纹理=空;
}
公共无效初始化()
{
}
公共void加载内容(ContentManager内容)
{
path=“Character/BlueAnvil”;
纹理=内容。加载(路径);
}
公开作废更新(游戏时间游戏时间)
{
位置+=速度;
//输入控件
KeyboardState keyState=Keyboard.GetState();
if(keyState.IsKeyDown(Keys.A))
位置X-=5f;
if(键状态IsKeyDown(键D))
位置X=5f;
if(keyState.IsKeyDown(Keys.Space)和&hasshopped==false)
{
位置Y-=10f;
速度Y=-5f;
hasshopped=true;
}
if(hasshopped==true)
{
浮点数i=1;
速度Y+=0.15f*i;
}
如果(位置Y+纹理高度>=450)
hasshopped=false;
if(hasshopped==false)
速度Y=0f;
}
公共作废抽签(SpriteBatch SpriteBatch)
{
绘制(纹理、位置、颜色、白色);
}
}
}
我需要得到这个修复,这样我才能记住它。了解如何做这件事,我需要帮助。所以我需要帮助,以了解我做错了什么。

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

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


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

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

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

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

最后,还有文件本身的文件格式。如果它不是.xnb,则不太可能被接受。xnb文件由XNA或Monogame内容管道项目创建。在XNA中,所有文件都必须转换成这种格式,但内容管道为您做到了这一点。在Monogame中,有些文件可以直接加载,但它们因操作系统而异。我记得头顶上的窗口同时接受.png和.wav文件。我记不起其他被接受的文件格式,并且在查找上次搜索时看到的方便表格时遇到困难

因此,游戏实际上希望加载的是“Content/Character/BlueAnvil.xnb”或“Content/Character/BlueAnvil.png”


编辑:虽然我发布这个答案已经有一段时间了,而且基本上还是正确的,但我觉得我应该提到的是,Monogame现在已经取消了ContentManager加载非.xnb文件的功能,例如.png和.wav。但是,它确实具有通过Texture2D.FromStream(graphicsDevice,fileStream)等方法加载这些文件的功能。这是你应该使用的

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

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

path = "Character/BlueAnvil"
修订:

path = "Character//BlueAnvil"


“我的团队希望我成为高级程序员”-你希望我们为你做这项工作,是吗?我不明白为什么这样做行不通。我不明白。为什么代码不起作用?它本想在屏幕上放一个精灵,但却制造了一个错误。你自己找答案了吗?这个问题以前已经被回答过很多次了,这是不必要的。正斜杠在C#字符串常量中没有特殊意义。如果路径包含一个反斜杠,那么就需要这样做,但事实并非如此。
path = "Character/BlueAnvil"
path = "Character//BlueAnvil"
path = @"Character/BlueAnvil"