XNA内容目录迭代

时间:2013-01-09 15:17:20

标签: c# c#-4.0 xna xna-4.0

是否有任何对象或函数可以迭代XNA内容中的set目录中的文件?

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

2 个答案:

答案 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,但我认为它可以让您到达您想要的位置。

Content Manifest Extension Sample