2010-10-29 11 views
6

Actualmente estoy desarrollando un juego usando XNA (Proyecto escolar), y me preguntaba si hay una manera de enumerar todos los recursos durante el tiempo de ejecución porque mis archivos de recursos se llaman ### - Name ## y quiero indexarlos en el primer número de 3 dígitos.XNA: ¿Obtener una matriz/lista de recursos?

Respuesta

12

¿Ayudaría algo como esto?

public static Dictionary<String, T> LoadContent<T>(this ContentManager contentManager, string contentFolder) 
{ 
    //Load directory info, abort if none 
    DirectoryInfo dir = new DirectoryInfo(contentManager.RootDirectory + "\\" + contentFolder); 
    if (!dir.Exists) 
     throw new DirectoryNotFoundException(); 
    //Init the resulting list 
    Dictionary<String, T> result = new Dictionary<String, T>(); 

    //Load all files that matches the file filter 
    FileInfo[] files = dir.GetFiles("*.*"); 
    foreach (FileInfo file in files) 
    { 
     string key = Path.GetFileNameWithoutExtension(file.Name); 

     result[key] = contentManager.Load<T>(contentManager.RootDirectory + "/" + contentFolder + "/" + key); 
    } 
    //Return the result 
    return result; 
} 
+0

¿Por qué no pensé en simplemente escanear la carpeta de contenido:/ –

+0

Great stuff! Para cualquiera que esté luchando por usar esto, encontré que para mi proyecto necesitaba eliminar "contentManager.RootDirectory +" de la llamada de carga porque establecí el Content.RootDirectory = Contenido ya. Además, este método debe estar en una clase estática para ser utilizado. – Mafro34

+0

Tenga en cuenta que esto parece cargar todo el contenido (por lo tanto, el nombre del método). Si desea enumerar los elementos pero * no cargarlos *, esto puede ser un poco pesado. Además, no creo que haya ninguna forma de enumerar el contenido de cierto tipo sin cargar el contenido. Meh. Supongo que un paso fuera de línea funcionaría bien en este escenario. – cod3monk3y