我正在制作游戏的关卡编辑器,我不想做“内容 - >添加并选择图像/精灵/纹理”,然后执行Texture2D texture1 = Content.Load<Texture2D>(@"path\name");
,我想要通过OpenFileDialog
将我需要的每个纹理添加到我的项目中。
我已经实现了OpenFileDialog
,所以当我有一个带有我的图像的文件流时,我就到了。现在,如何在我的内容文件夹中加载纹理永久? (所以我会有.xnb文件?)
我读过要使用函数Texture2D.FromStream(GraphicsDevice, filestream);
,但这不会在我的文件夹中创建.xnb文件;我只需要与通常的加载纹理方式相同的东西,使用“content-&gt; add”,ecc。
谢谢!
答案 0 :(得分:4)
我建议只生成一个文件,该文件记录了要加载的游戏的所有资源。我已经停止依赖XNA内容项目模板,因为它要求您非常慎重地考虑添加的每个资源,这不利于游戏开发的快速原型设计。
当您的编辑器启动时,它会读取文件(包含您需要的每个资源的路径),并在每次打开新纹理时(从对话框中)附加到此文件,然后加载该纹理。这样,下次项目运行时,您的游戏将自动加载已添加的每个资源。你如何管理过大的资源缓存以及它何时加载和卸载取决于你,但我已经体验过这个更有效。
如果你担心包装,你也可以设置一些简单的压缩来装箱你的纹理和声音。
//This will just load all textures from a folder,
// and works well enough if you want to keep your game open/moddable.
foreach (string str in Directory.GetFiles("resource\\texture\\","*.png", SearchOption.AllDirectories))
{
int lastSlash = str.LastIndexOf('\\');
string textureName = ((lastSlash > -1) ? str.Substring(lastSlash + 1) : str).Replace(".png","");
Util.Log(LogManager.LogLevel.Debug, "Loading texture: " + str);
textures[textureName]= Texture2D.FromStream(context.GraphicsDevice, (Stream)File.OpenRead(str));
}