是否有任何对象或函数可以遍历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