XNA内容目录迭代

本文关键字:迭代 XNA | 更新日期: 2023-09-27 17:51:11

是否存在可以遍历XNA Content中集合目录中的文件的对象或函数?

我在游戏内容的目录中有一组图像,但随着项目的进行,我将添加更多。但是,我不想每次添加新图像时都要添加一行代码,如果我能够遍历目录中的每个文件并将它们加载到数组中,那就更好了。有什么办法可以做到吗?

XNA内容目录迭代

您可以使用这个方便的扩展方法

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中模糊一些使之成为可能的方法。下面是一个示例项目,展示了一个变通方法供您查看——它在构建过程中构建了一个文件列表,这是一个拼凑,但我认为它可以让您到达您想要的地方。

内容清单扩展示例