XNA:从内容中的子文件夹加载

时间:2011-06-23 21:23:43

标签: c# xna

我在尝试简化XNA纹理加载时遇到了很多麻烦。我已经放弃了从指定目录动态加载纹理,所以现在我只是尝试使用解决方案内容中有组织的文件夹集合。我正在尝试使用以下代码行:

Content.Load<Texture2D>(".\\Graphics\\Characters\\Char1");

“Char1”是正确的资产名称,它存储在我的解决方案资源管理器中的“内容”下的“Graphics \ Characters”中,但它仍然会抛出“找不到文件”错误。我在这里做错了什么?

编辑:结果调试bin文件夹创建了错误的目录结构:\ Graphics \ Characters \ Characters。无论如何,谢谢你的帮助!

4 个答案:

答案 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将您的内容文件复制到此目录,否则它们不在那里。

解决此问题的几个选项

  1. 您可以将内容文件添加到Visual Studio并将其设置为部署模式Copy
  2. 您可以手动复制一次
  3. 您可以检查当前目录是否包含特定文件,如果不是
  4. 则上升两级
  5. 您可以使用常量来定义基目录并根据您是否正在调试来对其进行灵活处理。
  6. 以下是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");
    

    另请注意,以@开头的字符串不允许\转义,因此更容易用于定义目录。