是否有任何对象或函数可以迭代XNA内容中的set目录中的文件?
我在游戏内容的目录中有一组图像,但随着项目的进行,我将添加更多。但是,我不想每次添加新图像时都添加一行代码,如果我能够遍历目录中的每个文件并将它们加载到数组中,那就更好了。有没有办法做到这一点?
答案 0 :(得分:3)
您可以使用这种方便的扩展方法
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只是内容文件夹中的子文件夹
通过folderContent["MyAssetName"]
答案 1 :(得分:1)
不在XNA 4.0中。 MS决定掩盖一些使XNA 3.1成为可能的方法。这是一个示例项目,显示了一个可供您查看的解决方法 - 它在构建过程中构建了一个文件列表,这是一个kludge,但我认为它可以让您到达您想要的位置。