2016-05-22 5 views
1

私はVSのMonoGameでゲームを構築しています。 MonoGame(XNBファイルを生成する)からコンテンツパイプラインを使用しています。Content ManagerですべてのXNBファイルをスキャンするにはどうすればよいですか?

私のゲームは拡張性があります(ユーザーが曲/チャートをダウンロードできるリズムゲームです)。だから私は "プラグイン" XNBファイルをサポートしなければならなかった。

私はカスタムタイプのカスタムインポータ/リーダ/ライタを既に作成していますが、利用可能なxnbを見つけるためにコンテンツフォルダをスキャンする方法が見つかりません。たとえば、ユーザーがContentフォルダにSong1.xnbを追加した場合、ファイルがそこにあることを(プログラムで)どのように知ることができますか?

ContentManagerにshowFilesまたはscanContentが見つかりませんでした。使用可能なすべてのファイルがリストされています。どのようにしてクロスプラットフォームのコンテンツフォルダにあるファイルを見つけることができますか?私の構造の

例:

Content 
    - Songs 
    - Song0 
     - 0.xnb 
     - 1.xnb 
     - Song0.xnb 
    - Song1 
     - 0.xnb 
     - Song0.xnb 

だから私の歌フォルダは常に(曲のための構造を持っているファイル.xnb {フォルダ}を有し、またX.xnbに対する基準(0、 1,2 ...))。しかし、どのフォルダが存在するのかわかりませんフォルダです。Load<Music>("Songs\\{SongFolder}\\{SongFolder}.xnb")

ありがとう!

答えて

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変数は、あなたからすべてのテクスチャ/曲をロードするteのフォルダにコンテンツのフォルダ(それなし)からのパスでなければなりません。あなたのケースでは、 "Songs \ Songs0"をパラメーターとして渡し、Texture2DSongまたはSoundEffectを置き換えても問題ありません。

また、Help.RootDirは私が作った簡単な関数である:

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

System.IO;

+0

奇妙なが含まれ、それがここで働くことseensしません。私はContent.RootDirectoryに\が存在しないので(これはちょうど "Content"です)、Directory.GetFiles(Content.RootDirectory)は何も返しません。 –

+0

私の間違いです。私はGetFilesがファイルを返すだけで、私が探していたフォルダにファイルがないことに気づいていませんでした。 GetDirectoriesを使用すると効果がありました。ありがとう! –

関連する問題