2

XNAゲームの特定のフォルダーにあるすべての画像アセットを読み込むにはどうすればよいですか?テクスチャは通常のようにコンテンツプロジェクトに配置されますが、追加する新しいテクスチャごとに行ごとにコピーする代わりに、すべてを自動的にロードする機能を言います。

4

1 に答える 1

3

主に2つの方法があります

1番目:画像の名前を1からNに変更して、次のようなforループで画像を読み込むことができるようにします。

List<Texture2D> images = new List<Texture2D>();
string folderPath = "MyImages/";
for(int i= 0; i<Count; i++)
{
   try
   {
        images.Add(Content.Load<Texture2D>(folderPath + i.ToString));
   }
   catch
   {
        break;
   }
}

上記のコードは特定のカウントで機能します。反復をwhile(true)に変更してiをインクリメントできます。これ以上画像がない場合、catchブログは壊れます。

または、これを使用します(静的クラスを、サブ名前空間フォルダーの下ではなく、ゲームプロジェクトの名前空間に配置します)。関数から「this」を削除するよりもコンテンツを拡張したくない場合)

public static class MyExtension
{
        public static List<T> LoadListContent<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;
        }
}

実際のパスの長さが256を超える場合、このコードには問題があり、関数は機能しません。ので注意してください。

于 2012-02-19T14:01:19.477 に答える