Сегодня я поделюсь с вами собственным классом, который хранит изображения в моих играх. Этот класс самостоятельно загружает текстуры при запуске игры (в обход Content Pipeline) и предоставляет возможность изменять их во время исполнения. Сегодня я также доработал его до такого состояния, что теперь можно абстрагироваться от необходимости работы текстурами внутри атласа.

Следующая структура хранит информацию о изображении:

Ничего необычного, кроме того, что данная структура может сама себя отрисовать через SpriteBatch с помощью метода Draw.

Дальше идет класс ImageManager в котором хранятся все изображения:

Изображения я храню в виде хеш-таблицы с доступом по названию текстуры.

Это конструктор, которых вылавливает все директории, которые находятся внутри Content/Images/ и вытаскивает из них все изображения. Если ваш проект настолько запутан сложен, что вы храните изображения в папках внутри папок, которые находятся внутри третьих папок, то добавляйте еще один цикл поиска директорий.

Это наш xml-файл, в котором хранится информация о каждой текстуре-атласе.

В этом блоке мы загружаем наши текстуры в заносим в string key имя текстуры в виде “folder/filename” лишая ее разрешения. По-этому имени можно будет обратиться к атласу-текстуре целиком.

В этом блоке, мы ищем информацию о более мелких текстурах, которые входят в наш атлас текстур. Если таковая находятся то каждая из мелких текстур заносится в хеш-таблицу.

В заключении, заносим в хеш-таблицу саму текстуру-атлас. Обращаю ваше внимание на то, что несмотря на то, что мы создаем структуру Image для каждой мелкой текстуры, входящей в состав атласа, сама текстура-атлас(Texture2D texture) хранится в памяти всего один раз, а доступ к ней предоставляется по ссылке.