将所有Texture2D加载到一个文件夹中

时间:2012-02-19 13:28:28

标签: c# xna load xna-4.0 texture2d

如何在XNA游戏中加载特定文件夹中的所有图像资源?纹理像普通一样位于内容项目中,但是我说的不是为我添加的每个新纹理逐行复制,而是自动加载它们。

1 个答案:

答案 0 :(得分:3)

主要有两种方式

1st:将图像从1重命名为N,以便您可以在for循环中加载图像,例如

List<Texture2D> images = new List<Texture2D>();
string folderPath = "MyImages/";
for(int i= 0; i<Count; i++)
{
   try
   {
        images.Add(Content.Load<Texture2D>(folderPath + i.ToString));
   }
   catch
   {
        break;
   }
}

上面的代码适用于特定计数,您可以将迭代更改为while(true)递增i,如果没有更多图像,catch博客将会中断。

或使用它(将静态类放在游戏项目的命名空间中,而不是在任何子命名空间文件夹下)它会起作用。如果您不想扩展内容而不是从函数中删除“this”

public static class MyExtension
{
        public static List<T> LoadListContent<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;
        }
}

如果您的实际路径长度大于256,则此代码存在问题,该功能将无效。所以要小心。