保存纹理内容路径为字符串
本文关键字:字符串 路径 纹理 保存 | 更新日期: 2023-09-27 18:08:39
我想知道是否有一种简单的方法来存储字符串中纹理的路径。我之所以这么想,是因为我在游戏中使用了一个保存系统,我需要在一个文件中存储纹理的路径,以便以后加载它。我试过使用Texture2D。名称,但只返回"或null。如果我不能得到完整的路径,没关系,但至少我希望有纹理的名称。
编辑:我想我解释得有点不好,或者我没有正确理解答案,我将重新解释。我已经做了一个脚本,将保存位置,HP等"敌人"类。然后将其存储在'My Documents文件夹中的.txt文件中。一旦我想要加载信息,我就创建一个新的敌人实例(Vector2, int)。然后加载信息并使用int类型。解析将字符串转换为int > new Enemy(new Vector2(int.Parse(string1), int.Parse(string2)), int.Parse(string3)) <
然后我想要的是以某种方式保存纹理的名称,以便稍后使用上面提到的类似方法加载它。
Texture2D严格来说是一个内存对象,Texture2D和文件之间没有关系(除了Texture2D可以从文件中加载并保存到文件中)。如果你想记住你加载它的文件名,你应该在加载纹理时保持文件名。
编辑回复您的评论:
假设你不是在谈论截图,你需要做这样的事情:
FileStream fs = new FileStream("myFile.png", FileMode.OpenOrCreate);
myTexture.SaveAsPng(fs, myTexture.Width, myTexture.Height);
fs.Flush();
大多数对象没有可用的名称,即使它们有可用的名称,作为文件名也不一定是安全的。
除非你有很好的理由期望你的对象有一个好名字,并且实际使用它,否则我建议你只使用Guid.NewGuid().toString()
作为文件名——安全且唯一。
ContentManager
具有RootDirectory
属性,用于标识存储内容管理器内容的文件夹。该路径是相对于可执行文件夹的,因此您可以使用该路径构建内容的路径,以及在加载内容时指定的名称。
例如,如果你像这样加载。png纹理:
Texture2D texture = Content.Load<Texture2D>("SomeTexture")
那么该纹理的路径可以像这样构建:
string path = Content.RootDirectory + Path.DirectorySeparator + "SomeTexture" + ".png"
注意,为了知道扩展名是什么,您需要对文件类型有一些了解。这还假设您没有更改内容项属性中的名称,因此您在Load
调用中使用的键与文件名匹配,默认情况下是这样做的。
如果你将你的内容存储在子文件夹中,那么你只需要将它们附加起来,以建立完整的路径。
如果您需要完整的磁盘路径,而不是相对路径,那么您可以获得可执行路径并将其添加到Content.RootDirectory
。在这方面,谷歌是你的朋友。
如果你的游戏是基于内容项目的,最简单的方法就是使用与内容项目路径根相关的路径。
在你的内容项目中:
the relative path to file is "Textures/Animated/Rambo"
在你的脚本:
TextureAsset = "Textures/Animated/Rambo";
在你的引擎
Texture = Content.Load<Texture2D>( "Textures/Animated/Rambo");
//Or if you don't want to load through Content
Texture = Texture2D.LoadFromFile(Path.Combine(Content.RootDirectory, "Textures/Animated/Rambo"));
如果你想保存,我建议你按照同样的方式进行,并强制保存在内容项目文件夹