2010-10-29 27 views
6

Tôi hiện đang phát triển trò chơi sử dụng XNA (Dự án trường học) và tôi đã tự hỏi liệu có cách nào để liệt kê tất cả các tài nguyên trong thời gian chạy không vì các tệp tài nguyên của tôi có tên ### - Tên ## và tôi muốn lập chỉ mục chúng số có 3 chữ số đầu tiên.XNA: Nhận một mảng/danh sách tài nguyên?

Trả lời

12

Có điều gì đó giống như trợ giúp này?

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

Tại sao tôi không nghĩ đến việc chỉ quét thư mục nội dung:/ –

+0

Công cụ tuyệt vời! Đối với bất cứ ai đấu tranh để sử dụng điều này tôi thấy rằng đối với dự án của tôi, tôi cần phải loại bỏ "contentManager.RootDirectory +" khỏi cuộc gọi tải vì tôi đã thiết lập Content.RootDirectory = Nội dung rồi. Ngoài ra phương pháp này cũng cần phải được sử dụng trong một lớp tĩnh. – Mafro34

+0

Lưu ý rằng điều này dường như tải tất cả nội dung (do đó tên của phương thức). Nếu bạn chỉ muốn liệt kê các mục nhưng * không tải * chúng, điều này có thể hơi nặng. Ngoài ra, tôi không nghĩ rằng có bất kỳ cách nào để liệt kê nội dung của một loại nhất định mà không tải nội dung. Meh. Tôi cho rằng một bước ngoại tuyến sẽ hoạt động tốt trong trường hợp này. – cod3monk3y

Các vấn đề liên quan