XNA内容目录迭代
本文关键字:迭代 XNA | 更新日期: 2023-09-27 17:51:11
是否存在可以遍历XNA Content中集合目录中的文件的对象或函数?
我在游戏内容的目录中有一组图像,但随着项目的进行,我将添加更多。但是,我不想每次添加新图像时都要添加一行代码,如果我能够遍历目录中的每个文件并将它们加载到数组中,那就更好了。有什么办法可以做到吗?
您可以使用这个方便的扩展方法
public static class Extension Methods
{
public static List<T> LoadContentFolder<T>(this ContentManager contentManager, string contentFolder)
{
DirectoryInfo dir = new DirectoryInfo(contentManager.RootDirectory + "/" + contentFolder);
if (!dir.Exists)
throw new DirectoryNotFoundException();
List<T> result = new List<T>();
FileInfo[] files = dir.GetFiles("*.*");
foreach (FileInfo file in files)
{
result.Add(contentManager.Load<T>(contentFolder + "/" + file.Name.Split('.')[0]));
}
return result;
}
}
如果你不想扩展类,从构造函数中删除"this"关键字。你可以这样使用:
Dictionary<string,Texture2D> folderContent = Content.LoadContentFolder<Texture2D>("FolderName");
FolderName只是content文件夹下的子文件夹
通过folderContent["MyAssetName"]
不支持XNA 4.0。MS决定在XNA 3.1中模糊一些使之成为可能的方法。下面是一个示例项目,展示了一个变通方法供您查看——它在构建过程中构建了一个文件列表,这是一个拼凑,但我认为它可以让您到达您想要的地方。
内容清单扩展示例