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)which 接受指定搜索模式的第二个参数。

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

此外,由于您使用数组 for 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 有点疯狂,并在“一个”行中完成:

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”,那么您应该结合“img”文件夹,而不是“content/img”

于 2013-06-04T08:06:12.563 回答