所以我在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 ...)的参考)。但我找不到Songs文件夹中存在的文件夹,所以我可以调用Load<Music>("Songs\\{SongFolder}\\{SongFolder}.xnb")
谢谢!
我使用此函数加载我的文件夹中的所有纹理。
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
变量应该是从content的文件夹(没有它)到要加载所有纹理/歌曲的te文件夹的路径。在您的情况下,将“Songs \ Songs0”作为参数传递,将Texture2D替换为Song或SoundEffect,它将正常工作。
此外,Help.RootDir
是我做的一个简单的功能:
public static string RootDir(string s)
{ return s.Substring(0, s.LastIndexOf(@"\")); }
还包括System.IO;