是否有任何對象或函數可以遍歷XNA內容中的設置目錄中的文件?XNA內容目錄迭代
我在遊戲內容的目錄中有一組圖像,但隨着項目的進行,我將添加更多內容。但是,我不希望每次添加新圖像時都要添加一行代碼,如果能夠遍歷目錄中的每個文件並將它們加載到數組中,會更好。有沒有辦法做到這一點?
是否有任何對象或函數可以遍歷XNA內容中的設置目錄中的文件?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;
}
}
從constuctor刪除「這個」關鍵詞,如果你不想進行擴展的類。您可以使用它像這樣:
Dictionary<string,Texture2D> folderContent = Content.LoadContentFolder<Texture2D>("FolderName");
文件夾名稱僅僅是一個子文件夾的內容文件夾
,並獲得內做folderContent["MyAssetName"]
不在XNA 4.0中。 MS決定掩蓋一些在XNA 3.1中實現這一點的方法。下面是一個示例項目,展示了一個解決方案供您查看 - 它在構建過程中構建了一個文件列表,這是一個混亂的過程,但它會讓您到達您想要的位置,我想。
正常工作對我來說,即使有ClickOnce部署。將您的內容文件夾設置爲「內容」並指定一個文件夾,即使在分配時也會被複制。 – Cyral
我再次使用朋友的電腦進行檢查,發現這確實起作用。我還發現它可以與streamreader/streamwriters一起工作,但是所訪問的數據是XNB格式的,因爲XNA將所有給它的文件轉換爲XNB格式,然後將它們壓縮到應用程序中。目錄的東西最確定的工作。 – Pharap
很高興我能幫忙:) – Cyral