Загрузите все Texture2D в папку - PullRequest
2 голосов
/ 19 февраля 2012

Как я могу загрузить все графические ресурсы в определенную папку в моей игре XNA? Текстуры расположены в проекте контента, как обычно, но вместо копирования строки за строкой для каждой новой текстуры, которую я добавляю, есть возможность загружать их все автоматически.

1 Ответ

3 голосов
/ 19 февраля 2012

В основном есть два способа

1-й: переименуйте ваши изображения от 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;
   }
}

вышеприведенный код работает для определенного количества, вы можете изменить для итерации, пока (true) увеличивая i, блог перехвата прекратится, если изображений больше не будет.

или используйте это (поместите статический класс в пространство имен вашего игрового проекта, а не в любую папку вложенного пространства имен), это будет работать. если вы не хотите расширять свой Контент, тогда удалите «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, функция не будет работать. Так что будьте осторожны.

...