int d = 0;
foreach (string curFile in System.IO.Directory.GetFiles("Content/img/"))
{
tiles[d] = Content.Load<Texture2D>(curFile);
d++;
}
我有上面的代码,它应该搜索目录img
,并将每个文件分配给tiles[]
数组。但是,它似乎正在搜索.xnb
文件,而不是.png
,我将图像保存为。我该如何解决这个问题?
答案 0 :(得分:3)
Directory.GetFiles(string path)
将返回该目录中每个文件的完整路径。由于您只需要.png文件,因此应使用Directory.GetFiles(string path, string searchPattern)
,它采用指定搜索模式的第二个参数。
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疯狂,并在“一”行中做到:
var tiles = Directory.GetFiles("Content/img/", ".png")
.Select( Content.Load<Texture2D> );
答案 1 :(得分:1)
Xna中的内容管理器使用预编译的xnb文件。
所以你必须搜索xnb文件,删除扩展名adn使路径相对于内容管理器根目录。
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) );
}
如果您的内容管理员根文件夹是“内容”,那么您应该与“img”文件夹合并,而不是“content / img”