int d = 0;
foreach (string curFile in System.IO.Directory.GetFiles("Content/img/"))
{
tiles[d] = Content.Load<Texture2D>(curFile);
d++;
}
我有上面的代码,它应该搜索目录,img
并将每个文件分配给tiles[]
数组。但是,它似乎是在搜索.xnb
文件,而不是.png
我保存图像的文件。我怎样才能解决这个问题?
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> );
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”