加载文件夹中的所有Texture2D

发布于 2025-01-07 05:10:59 字数 77 浏览 0 评论 0原文

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

How can I load all image assets in a particular folder in my XNA game? The textures are located in the content project like normal, but say instead of copying line after line for each new texture I add, the ability to load them all automatically.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦回梦里 2025-01-14 05:10:59

主要有两种方法

:第一:将图像从 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,则该函数将无法工作。所以要小心。

Mainly there are two ways

1st : Rename your images from 1 to N, so that you can load images in a for loop such as

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;
   }
}

the code above works for specific count, you may change for iteration to while(true) incrementing i, the catch blog will break if there is not any images more.

or use this (put the static class in the namespace of your game-project, not under any sub-namespace folder) it would work. if you do not want to extend your Content than remove "this" from the function)

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;
        }
}

This code has a problem if your real path's length will be greater than 256, the function will not work. So be careful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文