2013-01-09 78 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