XNA コンテンツのセット ディレクトリ内のファイルを反復処理できるオブジェクトまたは関数はありますか?
ゲームのコンテンツのディレクトリに一連の画像がありますが、プロジェクトが進むにつれて、さらに追加する予定です。ただし、新しい画像を追加するたびにコード行を追加する必要はありません。ディレクトリ内のすべてのファイルを反復処理して配列にロードできれば、はるかに優れています。これを行う方法はありますか?
この便利な拡張方法を使用できます
public static class Extension Methods
{
public static List<T> LoadContentFolder<T>(this ContentManager contentManager, string contentFolder)
{
DirectoryInfo dir = new DirectoryInfo(contentManager.RootDirectory + "/" + contentFolder);
if (!dir.Exists)
throw new DirectoryNotFoundException();
List<T> result = new List<T>();
FileInfo[] files = dir.GetFiles("*.*");
foreach (FileInfo file in files)
{
result.Add(contentManager.Load<T>(contentFolder + "/" + file.Name.Split('.')[0]));
}
return result;
}
}
クラスを拡張したくない場合は、constuctorから「this」キーワードを削除してください。あなたはそれを次のように使うことができます:
Dictionary<string,Texture2D> folderContent = Content.LoadContentFolder<Texture2D>("FolderName");
FolderNameは、コンテンツフォルダ内の単なるサブフォルダです
そして、行うことによってアクセスfolderContent["MyAssetName"]
XNA4.0にはありません。MSは、XNA3.1でこれを可能にしたいくつかの方法を隠すことにしました。これは、レビューするための回避策を示すプロジェクトの例です。ビルドプロセス中にファイルリストをビルドすることになりますが、これは厄介ですが、目的の場所に到達できると思います。