2016-05-22 4 views
1

Так что я строю игру с MonoGame в VS. Я использую Content конвейер из MonoGame (который генерирует файлы XNB).Как сканировать все файлы XNB в Content Manager?

Дело в том, что моя игра экспансивна (это игра rhytim, в которой пользователь может скачать песни/графики). Поэтому мне пришлось поддерживать «подключаемые» файлы XNB.

Итак, я уже сделал свой пользовательский импортер/читатель/писатель для своих пользовательских типов, но не могу найти способ сканирования папки содержимого, чтобы найти, какие xnb доступны. Например, если пользователь добавляет папку Song1.xnb в Content, как я буду (программно) знать, что файл есть?

Я не нашел ни одного showFiles или scanContent в ContentManager, чтобы перечислить все доступные файлы. Как я могу найти, какие файлы находятся в моей папке содержимого в кросс-платформенной форме?

Пример моей структуры:

Content 
    - Songs 
    - Song0 
     - 0.xnb 
     - 1.xnb 
     - Song0.xnb 
    - Song1 
     - 0.xnb 
     - Song0.xnb 

Так моя папка песня всегда есть {Папка} .xnb файл, которые имеют структуру песен (а также ссылка на X.xnb (0, 1,2 ...)). Но я не могу найти, какие папки существуют на Песнях, поэтому я могу позвонить Load<Music>("Songs\\{SongFolder}\\{SongFolder}.xnb")

Спасибо!

ответ

1

Я использую эту функцию для загрузки всех текстур в свою папку.

public static   List<Texture2D>  Textures(string folderPath) 
{ 
    if (!folderPath.StartsWith(@"\")) folderPath = @"\" + folderPath; 
    List<string> paths = Directory.GetFiles(Help.RootDir(Content.RootDirectory) + folderPath).ToList(); 
    List<Texture2D> images = new List<Texture2D>(); 
    foreach (string s in paths) 
    { 
     if (s.EndsWith(".xnb")) 
      images.Add(Texture(s.Replace(Content.RootDirectory, "").Replace(".xnb", ""))); 
    } 
    return images; 
} 

folderPath переменная должна быть путь от содержимого папки (без него) в тэ папку вы хотите загрузить все текстуры/песни из. В вашем случае передайте «Songs \ Songs0» в качестве параметра, замените Texture2D на Песня или SoundEffect, и она будет работать нормально.

Также Help.RootDir простая функция, которую я сделал:

public static string RootDir(string s) 
{ return s.Substring(0, s.LastIndexOf(@"\")); } 

А также включают System.IO;

+0

Weird, он не seens работать здесь. Я получаю исключение из функции RootDir, потому что в моем Content.RootDirectory нет (это просто «Контент»). Также Directory.GetFiles (Content.RootDirectory) ничего не возвращает. –

+0

Хорошо, поэтому моя ошибка. Я не видел, что GetFiles возвращает только файлы (и у меня нет файлов в папке, которую я искал). С GetDirectories это сработало. Благодаря! –