Лучший способ обработать загрузку текстур и доступ к нескольким классам в XNA - PullRequest
4 голосов
/ 10 июля 2011

Итак, у меня есть простой проект XNA.По сути, у меня есть вопрос, как справиться с загрузкой текстур и обеспечить правильный доступ к этим текстурам из других классов?

Например, каждый учебник, который я видел, а также то, что я могу сказать изФактическая логика XNA, вы должны загружать текстуры в методе LoadContent().Но, скажем, у меня есть другой класс, Level, которому нужен собственный уникальный набор текстур, и внутри него я создаю экземпляр моего Player объекта, которому также нужна своя собственная текстура, и, конечно, враги и все остальное.

Один из способов сделать это - загрузить текстуры, необходимые для определенного класса, в его конструктор, но для этого мне нужно будет установить новый менеджер контента или передать менеджер контента каждому конструктору,что кажется громоздким и внешним по отношению к тому, что было задумано.

Итак, когда речь идет о полномасштабных проектах, которые не являются небольшими учебниками, использующими 2 текстуры, каков лучший способ реализовать их загрузку?

Ответы [ 2 ]

6 голосов
/ 11 июля 2011

Создайте столько классов ContentManager, сколько вам нужно.

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

Вы не можете выгружать (Dispose() из) отдельных ресурсов, которые загружает ContentManager. Вы можете только Unload() весь менеджер контента (избавиться от всего, что он загрузил). Это может повлиять на любое решение о том, когда создавать контент-менеджеры.

Возможно, вы захотите создать один ContentManager за уровень. А затем еще один ContentManager для обработки вещей, которые не нужно выгружать между уровнями (например: вещи, которые нужны вашему Player или вражеским объектам).

Нет ничего плохого и в прохождении экземпляров ContentManager.

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

0 голосов
/ 14 июля 2011

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

Одним из таких способов является создание абстрактного базового класса "GameObject", который получает в своем конструкторе либо объект Game, либо экземпляр ContentManager.

Таким образом вы гарантируете, что каждый из этих компонентов будет иметь доступ к ContentManager.

Еще один способ расширить это - создать собственный ContentManager, который будет содержать всю логику загрузки контента, а также добавлять такие вещи, как загрузка в рабочий поток, потоковая передача и т. Д.

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

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