2013-01-09 76 views
0

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

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

回答

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; 
     } 
} 

从constuctor删除“这个”关键词,如果你不想进行扩展的类。您可以使用它像这样:

Dictionary<string,Texture2D> folderContent = Content.LoadContentFolder<Texture2D>("FolderName"); 

文件夹名称仅仅是一个子文件夹的内容文件夹

,并获得内做folderContent["MyAssetName"]

+1

正常工作对我来说,即使有ClickOnce部署。将您的内容文件夹设置为“内容”并指定一个文件夹,即使在分配时也会被复制。 – Cyral

+1

我再次使用朋友的电脑进行检查,发现这确实起作用。我还发现它可以与streamreader/streamwriters一起工作,但是所访问的数据是XNB格式的,因为XNA将所有给它的文件转换为XNB格式,然后将它们压缩到应用程序中。目录的东西最确定的工作。 – Pharap

+1

很高兴我能帮忙:) – Cyral

1

不在XNA 4.0中。 MS决定掩盖一些在XNA 3.1中实现这一点的方法。下面是一个示例项目,展示了一个解决方案供您查看 - 它在构建过程中构建了一个文件列表,这是一个混乱的过程,但它会让您到达您想要的位置,我想。

Content Manifest Extension Sample