C# · 12月 24, 2021

c# – 如何使用XNA加载文件夹中的所有文件?

我想使用Content.Load(“filename”)将文件夹“Content / textures”中的所有文件加载到游戏中;

但是,我无法以这种方式“找到”位于Content内的文件(程序反而看“bin / debug /../ Content / textures”,但是在尝试加载jpg / png文件时遇到错误Content.Load.

我怎样才能实现我想做的事情?
我想将Content内部文件夹中的所有文件(哪个内容文件夹是正确的?)加载到游戏中,这样我就不必指定每一个纹理.

谢谢.

解决方法 您可以使用此帮助程序类来执行此操作.它的工作原理是获取给定目录并使用GetFiles()方法创建需要加载的所有纹理的列表.然后使用您的ContentManager正常加载它们,并将它们放入字典中以便您可以使用它们. public static class TextureContent { public static Dictionary<string,T> LoadListContent<T>(this ContentManager contentManager,string contentFolder) { DirectoryInfo dir = new DirectoryInfo(contentManager.RootDirectory + “/” + contentFolder); if (!dir.Exists) throw new DirectoryNotFoundException(); Dictionary<String,T> result = new Dictionary<String,T>(); FileInfo[] files = dir.GetFiles(“*.*”); foreach (FileInfo file in files) { string key = Path.GetFileNameWithoutExtension(file.Name); result[key] = contentManager.Load<T>(contentFolder + “/” + key); } return result; } }

创建一个字典来存储纹理,而不是一行一行的Texture2Ds

public Dictionary<string,Texture2D> spriteContent;

…并在LoadContent方法中调用该方法

spriteContent = TextureContent.LoadListContent<Texture2D>(content,”textures”);

现在,无论何时需要纹理,只需:

Whatever.Image = spriteContent[“WhateverTexture”]

确保TextureName是纹理的资产名称.