XNA: загрузка из подпапки в контенте - PullRequest
3 голосов
/ 24 июня 2011

У меня много проблем при попытке упростить загрузку текстур XNA.Я отказался от динамической загрузки текстур из указанного каталога, поэтому сейчас я просто пытаюсь работать с организованным набором папок в содержимом решения.Я пытаюсь использовать следующую строку кода:

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

"Char1" - это правильное имя ресурса, и оно хранится в "Graphics \ Characters" в Content в моем обозревателе решений, но оно все ещевыдает ошибку «файл не найден».Что я здесь не так делаю?

РЕДАКТИРОВАТЬ: Оказывается, папка отладочной корзины создала неправильную структуру каталога: \ Graphics \ Characters \ Characters.Спасибо за помощь независимо!

Ответы [ 4 ]

5 голосов
/ 24 июня 2011

Попробуйте удалить ваш ведущий слеш. например,

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

Используете ли вы контент-проект для этих ресурсов? Вы можете установить каталог 'Content Root', и все ресурсы будут находиться в относительных путях.

Взгляните на эту запись MSDN , надеюсь, это поможет вам. Удачи.

4 голосов
/ 24 июня 2011

Из того, что вы говорите, что файл находится в 'Content', убедитесь, что вы делаете это перед загрузкой чего-либо:

Content.RootDirectory = "Content"

И избавиться от части '. \'.

2 голосов
/ 24 июня 2011

Вы можете установить свойство RootDirectory в Content для корневого расположения ваших файлов содержимого.Это заставит ваши пути работать правильно.

Кроме того, нет необходимости в одной точке .\

1 голос
/ 24 июня 2011

Какой у вас рабочий каталог?Обычно это bin \ Debug (расположение создаваемого exe-файла), и если вы не говорите Visual Studio скопировать файлы содержимого в этот каталог, они там не находятся.

Несколько опций для исправления этого

  1. Вы можете добавить файлы содержимого в Visual Studio и установить для них режим развертывания Copy
  2. Вы можете вручную скопировать их один раз
  3. Вы можете проверить,текущий каталог содержит определенный файл и поднимается на два уровня, если он не
  4. . Вы можете использовать константу, чтобы определить базовый каталог и согнуть его в зависимости от того, отлаживаетесь вы или нет.

Вот пример 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");

Также обратите внимание, что строка, начинающаяся с @, не допускает экранирования \ и, таким образом, ее намного проще использовать для определения каталогов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...