所以我在VS中用MonoGame构建游戏。我正在使用MonoGame的内容管道(生成XNB文件)。
问题是我的游戏是可扩展的(这是一个用户可以下载歌曲/图表的游戏)。所以我不得不支持“插件”XNB文件。
所以我已经为我的自定义类型制作了自定义导入器/读取器/写入器,但我找不到扫描内容文件夹的方法来查找哪些xnb可用。例如,如果用户在Content文件夹中添加了Song1.xnb,我将如何(以编程方式)知道该文件在那里?
我在ContentManager中找不到任何showFiles或scanContent来列出所有可用文件。如何以跨平台方式查找我的内容文件夹中的文件?
我的结构示例:
Content
- Songs
- Song0
- 0.xnb
- 1.xnb
- Song0.xnb
- Song1
- 0.xnb
- Song0.xnb
所以我的歌曲文件夹总是有一个 {Folder} .xnb 文件,其中包含歌曲的结构(以及X.xnb(0,1,2 ...)的参考) 。但我找不到歌曲文件夹中存在的文件夹,因此我可以拨打Load<Music>("Songs\\{SongFolder}\\{SongFolder}.xnb")
谢谢!
答案 0 :(得分: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
变量应该是从内容的文件夹(没有它)到要加载所有纹理/歌曲的文件夹的路径。在你的情况下,传递&#34;歌曲\歌曲0&#34;作为参数,将 Texture2D 替换为 Song 或 SoundEffect ,它将正常工作。
此外,Help.RootDir
是我做的一个简单的功能:
public static string RootDir(string s)
{ return s.Substring(0, s.LastIndexOf(@"\")); }
还包括System.IO;