Размещать только определенные ресурсы в XNA?

13

ContentManager в XNA 4.0 имеет только один метод Unload (), который выгружает все активы.

Я хочу иметь некоторые «глобальные» активы, которые всегда загружаются, но затем я хочу, чтобы активы для каждого уровня были выгружены при изменении уровня.

Должен ли я создать второй экземпляр ContentManager как часть класса Level.cs? Или я должен использовать Game.Content, а затем вызвать .Dispose для загружаемых активов? Или я должен создать свой собственный ContentManager поверх функции ReadAsset, как описано здесь ?

Майкл Стум
источник

Ответы:

12

Создайте второй экземпляр ContentManager.

Вы никогда не должны Dispose()загружать вещи из ContentManager (используя реализацию по умолчанию), поскольку эти экземпляры являются общими и используются повторно.

Создание собственной версии ContentManager является ортогональным. В любом случае вы будете создавать второй экземпляр ContentManager (или класс, производный от него). Так что, если существующая реализация соответствует вашим целям - используйте ее, иначе переопределите то, что вы хотите изменить.

Конечно, если ваша игра сравнительно небольшая - тогда не будет большого значения, если вы просто используете один ContentManager и не будете беспокоиться о разгрузке контента между уровнями.

Эндрю Рассел
источник
5
+1 и напоминание для себя, чтобы связать здесь в следующий раз, когда кто-то попытается сказать мне, насколько хорош шаблон синглтона для менеджеров активов.
Я также нашел демонстрационную версию управления состоянием игры на веб-сайте XNA, которая использует именно это (1 глобальный Content Manager и 2 - на экранах, которые в этом нуждаются). Не очень интуитивно, но это подойдет :)
Майкл Стум