如何扫描内容管理器中的所有 XNB 文件?
How to scan all XNB files in Content Manager?
所以我正在 VS 中使用 MonoGame 构建游戏。我正在使用 MonoGame 的内容管道(生成 XNB 文件)。
问题是我的游戏是可扩展的(这是一个节奏游戏,用户可以下载 songs/charts)。所以我不得不支持 "plug-in" XNB 文件。
所以我已经为我的自定义类型创建了自定义导入器/Reader/编写器,但我找不到扫描内容文件夹以查找哪些 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
变量应该是从内容文件夹(没有它)到要从中加载所有 textures/songs 的文件夹的路径。在您的情况下,将 "Songs\Songs0" 作为参数传递,将 Texture2D 替换为 Song 或 SoundEffect , 它将正常工作。
此外,Help.RootDir
是我制作的一个简单函数:
public static string RootDir(string s)
{ return s.Substring(0, s.LastIndexOf(@"\")); }
并且还包括System.IO;
所以我正在 VS 中使用 MonoGame 构建游戏。我正在使用 MonoGame 的内容管道(生成 XNB 文件)。
问题是我的游戏是可扩展的(这是一个节奏游戏,用户可以下载 songs/charts)。所以我不得不支持 "plug-in" XNB 文件。
所以我已经为我的自定义类型创建了自定义导入器/Reader/编写器,但我找不到扫描内容文件夹以查找哪些 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
变量应该是从内容文件夹(没有它)到要从中加载所有 textures/songs 的文件夹的路径。在您的情况下,将 "Songs\Songs0" 作为参数传递,将 Texture2D 替换为 Song 或 SoundEffect , 它将正常工作。
此外,Help.RootDir
是我制作的一个简单函数:
public static string RootDir(string s)
{ return s.Substring(0, s.LastIndexOf(@"\")); }
并且还包括System.IO;