6

Content.Load("filename");を使用して、 「Content/textures」フォルダ内のすべてのファイルをゲームにロードしたいと考えています。

ただし、この方法で Content 内にあるファイルを「見つける」ことができません (プログラムはむしろ「bin/debug/../Content/textures」を調べますが、そこにある jpg/png ファイルを読み込もうとするとエラーが発生しますコンテンツ.ロード。

どうすればやろうとしていることを達成できますか? コンテンツ内のフォルダー (正しいコンテンツ フォルダーはどれですか?) 内のすべてのファイルをゲームにロードして、すべてのテクスチャを指定する必要がないようにしたいと考えています。

ありがとう。

4

3 に答える 3

8

これを行うには、このヘルパー クラスを使用できます。これは、指定されたディレクトリを取得し、GetFiles()メソッドを使用して、ロードする必要があるすべてのテクスチャのリストを作成することによって機能します。次に、通常どおりにそれらをロードし、ContentManagerそれらを辞書に入れて使用できるようにします。

 public static class TextureContent
    {
        public static Dictionary<string, T> LoadListContent<T>(this ContentManager contentManager, string contentFolder)
        {
            DirectoryInfo dir = new DirectoryInfo(contentManager.RootDirectory + "/" + contentFolder);
            if (!dir.Exists)
                throw new DirectoryNotFoundException();
            Dictionary<String, T> result = new Dictionary<String, T>();

            FileInfo[] files = dir.GetFiles("*.*");
            foreach (FileInfo file in files)
            {
                string key = Path.GetFileNameWithoutExtension(file.Name);


                result[key] = contentManager.Load<T>(contentFolder + "/" + key);
            }
            return result;
        }
    }

Texture2Ds の行ごとではなく、テクスチャを格納するための辞書を作成します。

  public Dictionary<string, Texture2D> spriteContent;

...そして、メソッドでメソッドを呼び出しLoadContentます

 spriteContent = TextureContent.LoadListContent<Texture2D>(content, "textures");

テクスチャが必要なときはいつでも、次のようにします。

Whatever.Image = spriteContent["WhateverTexture"]

TextureNameがテクスチャのアセット名であることを確認してください。

于 2012-10-16T12:33:39.463 に答える
2

XNA のコンテンツは、コンテンツ パイプラインを使用して構築する必要があります。ファイル.png(など) を.xnbファイルに変換します。これらは、実行時にインスタンスにContentManagerロードできる、処理済みのバイナリ コンテンツ ファイルです。Texture2D

Texture2D.FromStream( -MSDNを使用して画像ファイルを直接読み込むことができることに注意してください。ただし、XNA の既定のレンダリング モードで使用されるアルファを事前乗算しません。)

そのため、まずすべてのコンテンツ ファイルをビルドする必要があります。XNA コンテンツ パイプラインは MSBuild を使用します。Visual Studio のプロジェクト ファイルMSBuild ファイルです。したがって、そのプロジェクト ファイルを手動で編集して、ワイルドカードを使用して一連のファイルを作成する必要があります。このブログ投稿には、かなり前に私が尋ねたこの非常によく似た質問からリンクされている手順があります。

XNA でビルドされたコンテンツ ファイルは、ゲームの出力ディレクトリに関連するファイル システムに単純に格納されます。そのため、ディレクトリ内のファイルDirectory.GetFilesを列挙するために使用します。次に、拡張子なしのファイル名 ( で取得できます) を使用して.xnb、コンテンツ ディレクトリ ( ) からの相対パスをロードするためのパスを作成します。次に、作成したパスをに渡して、それぞれをロードします。ContentManager.RootDirectoryPath.GetFileNameWithoutExtensionContent.Load<Texture2D>

(.xnbファイルにはテクスチャ以外のものを含めることができることに注意してください。そのため、ディレクトリにテクスチャのみが含まれるように注意する必要があります。それ以外の場合は、ContentManager.Load<Texture2D>スローされる例外をキャッチする必要があります。)

于 2012-10-16T12:21:32.327 に答える
0

XNA では、一意でわかりやすい名前を付ける必要があるため、すべてのテクスチャを指定する必要があります。フォルダーからさまざまな量のテクスチャをロードする場合は、次の例を使用できます: http://www.csharp-examples.net/get-files-from-directory/

于 2012-10-16T11:52:43.757 に答える