我在尝试简化XNA纹理加载时遇到了很多麻烦。我已经放弃了从指定目录动态加载纹理,所以现在我只是尝试使用解决方案内容中有组织的文件夹集合。我正在尝试使用以下代码行:
Content.Load<Texture2D>(".\\Graphics\\Characters\\Char1");
“Char1”是正确的资产名称,它存储在我的解决方案资源管理器中的“内容”下的“Graphics \ Characters”中,但它仍然会抛出“找不到文件”错误。我在这里做错了什么?
编辑:结果调试bin文件夹创建了错误的目录结构:\ Graphics \ Characters \ Characters。无论如何,谢谢你的帮助!
答案 0 :(得分:5)
尝试删除前导斜杠。例如,
Content.Load<Texture2D>("Graphics\\Characters\\Char1");
您是否正在为这些资产使用内容项目?您可以设置“内容根目录”目录,并且资产都位于相对路径中。
看看this msdn entry,希望这可能对你有所帮助。祝你好运。
答案 1 :(得分:4)
根据您的说法,该文件位于“内容”中,请确保在加载任何内容之前执行此操作:
Content.RootDirectory = "Content"
摆脱'。\'部分。
答案 2 :(得分:2)
您可以将RootDirectory
中的Content
属性设置为内容文件的根位置。这将使您的路径正常工作。
此外,无需单点.\
答案 3 :(得分:1)
你的工作目录是什么?通常它是bin \ Debug(生成的exe的位置),除非您告诉Visual Studio将您的内容文件复制到此目录,否则它们不在那里。
解决此问题的几个选项
Copy
以下是3
的示例private string BaseDirectory = ".";
if (!Directory.Exists(".\Graphics"))
{
BaseDirectory = @"..\..";
}
...
Content.Load<Texture2D>(BaseDirectory + @"\Graphics\Characters\Char1");
以下是4的示例,请注意,如果您在发布模式下运行,这将无法顺利运行。
#if DEBUG
private const string BaseDirectory = @"..\..";
#else
private const string BaseDirectory = @".";
#endif
...
Content.Load<Texture2D>(BaseDirectory + @"\Graphics\Characters\Char1");
另请注意,以@
开头的字符串不允许\
转义,因此更容易用于定义目录。