Как загрузить все объекты изображения в определенную папку в моей XNA-игре? Текстуры расположены в проекте контента, как обычно, но вместо копирования строки после строки для каждой добавляемой новой текстуры можно автоматически загрузить их.Загрузите все Texture2Ds в папку
ответ
В основном существует два способа
первый: Переименование изображения от 1 до N, так что вы можете загружать изображения в цикле, такие как
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, ловушка catch сломается, если больше нет изображений.
или использовать это (поместите статический класс в пространство имен вашего игрового проекта, а не под любую папку подпространства имен), это сработает. если вы не хотите, чтобы расширить содержание, чем удалить «это» из функции)
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, то функция не будет работать. Так что будь осторожен.
Ваш второй пример - это почти то, как я пытался это сделать (но не удалось). Благодарю. Но (глупый вопрос), куда я должен поместить этот код? – Cyral
Я бы предположил, что вы поместили его в метод LoadContent любого класса, требующего этих изображений. –
Вы не можете вставить его в метод loadcontent(). Если я переименую это в loadcontent, он просто говорит: «Метод расширения должен быть определен в неэквивалентном статическом классе» – Cyral
Можете ли вы объяснить «почему», почему вы хотите это сделать? Чего вы пытаетесь достичь? Ответ, приведенный @icaptan, верен, но, возможно, вы решаете неправильную проблему, если мы понимаем, что именно вы пытаетесь сделать, мы могли бы указать вам в лучшем направлении. –
У меня есть много изображений кнопок для моей игры и вам нужен лучший способ загрузить их, чем делать теги Texture2D и content.loads миллион раз (преувеличение, но смотря на это так) – Cyral
Возможно, вам будет лучше добавить все эти на одно изображение. Это более эффективный способ работы с изображениями и создание намного меньших нагрузок контента. Но если у вас действительно есть тонны изображений, то ответ, приведенный ниже, на @icaptan будет работать нормально. Я лично рекомендовал бы его первый метод. –