0
int d = 0;
foreach (string curFile in System.IO.Directory.GetFiles("Content/img/"))
{
    tiles[d] = Content.Load<Texture2D>(curFile);
    d++;
}

ディレクトリを検索し、各ファイルを配列imgに割り当てる上記のコードがあります。ただし、画像を保存したのではなく、ファイルtiles[]を検索しているようです。どうすればこれを修正できますか?.xnb.png

4

2 に答える 2

3

Directory.GetFiles(string path)そのディレクトリ内のすべてのファイルの完全なパスを返します。.png ファイルのみが必要 なためDirectory.GetFiles(string path, string searchPattern)、検索パターンを指定する 2 番目の引数を取る which を使用する必要があります。

Directory.GetFiles("Content/img/", ".png");

また、配列を に使用しているため、ディレクトリからロードするテクスチャの数がわからtilesない可能性があるため、コードに問題があることが予想されます。代わりに、次を使用することをお勧めします。List<T>

var tiles = new List<Texture2D>();
foreach (var imagePath in System.IO.Directory.GetFiles("Content/img/", ".png"))
{
    tiles.Add( Content.Load<Texture2D>(imagePath) );
}

少し LINQ に夢中になって「1」行で実行することもできます。

var tiles = Directory.GetFiles("Content/img/", ".png")
            .Select( Content.Load<Texture2D> );
于 2013-06-01T19:31:12.840 に答える
1

Xna のコンテンツ マネージャーは、コンパイル済みの xnb ファイルで動作します。

したがって、xnb ファイルを検索し、拡張子を削除して、パスをコンテンツ マネージャーのルートからの相対パスにする必要があります。

var tiles = new List<Texture2D>();
foreach (var imagePath in System.IO.Directory.GetFiles("Content/img/", ".xnb"))
{
    var xnaPath = Path.Combine( "Content/img",
                                 Path.GetFileNameWithoutExtension(imagePath));

    tiles.Add( Content.Load<Texture2D>(xnaPath) );
}

コンテンツ マネージャーのルート フォルダーが「content」の場合、「content/img」ではなく「img」フォルダーと結合する必要があります。

于 2013-06-04T08:06:12.563 に答える