如何在Content Manager中扫描所有XNB文件?

问题描述 投票:1回答:1

所以我在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")

谢谢!

c# xna game-engine monogame
1个回答
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变量应该是从content的文件夹(没有它)到要加载所有纹理/歌曲的te文件夹的路径。在您的情况下,将“Songs \ Songs0”作为参数传递,将Texture2D替换为Song或SoundEffect,它将正常工作。

此外,Help.RootDir是我做的一个简单的功能:

public static string RootDir(string s)
{ return s.Substring(0, s.LastIndexOf(@"\")); }

还包括System.IO;

© www.soinside.com 2019 - 2024. All rights reserved.