Паттерны программирования игр
альтернативное решение — поместить все в код класса
GameObject
, но тогда мы расходуем память на хране-
ние в классе
Zone
данных рендеринга, которые ему во-
все не нужны. Собственно, в классе
Decoration
то же
самое происходит с физикой.
А теперь давайте попробуем реализовать все
описанное с помощью компонентов. Наши под-
классы полностью исчезают. Вместо них у нас бу-
дет один класс
GameObject
и два класса компонен-
тов:
PhysicsComponent
и
GraphicsComponent
.
Декорации — это просто
GameObject
с компонентом
GraphicsComponent
, но без
PhysicsComponent
.
А зона — наоборот. Реквизит включает оба компонента.
Никакого дублирования кода, никакого множественно-
го наследования и всего три класса вместо четырех.
Компоненты реализуют механизм plug-and-play для
объектов. Они позволяют нам создавать сложные сущ-
ности с разнообразным поведением, просто подключая
различные объекты компонентов к сокетам сущности.
Прямо программный Вольтрон получается.
Паттерн
Единая сущность охватывает множество областей
.
Чтобы области оставались изолированными, код каж-
дой из них помещается в отдельный
класс компонен-
та
. Сущность является
контейнером для компонентов
.
Когда использовать
Компоненты чаще всего находятся внутри основного клас-
са, который определяет сущности игры, но их также мож-
но использовать и в другом месте. Этот паттерн стоит при-
менять, когда выполняется одно из следующих условий.
• У вас есть класс, взаимодействующий со множе-
ством областей, которые вы не хотели бы связывать
друг с другом.
Хорошая аналогия —
меню в ресторане. Если
каждая сущность — мо-
нолитный класс, то вы
можете заказывать
только готовые комбо.
Нам нужен отдельный
класс для всех возмож-
ных
комбинаций
функ-
циональности. Чтобы
удовлетворить всех по-
сетителей, нам понадо-
бятся десятки комбо.
Компоненты — это
блюда по выбору à la
carte. Каждый посетитель
может выбрать блюда, ко-
торые ему нравятся.
«Компонент», точно
так же как и «Объект», —
одно из тех слов, кото-
рые в программировании
одновременно значат все
и ничего. Из-за этого оно
применяется для описа-
ния сразу нескольких
концепций. В программ-
ном обеспечении для
бизнеса словом «Компо-
нент» обозначают пат-
терн разработки для со-
здания не связанных
служб, общающихся
по сети.
Я пытался найти от-
дельное название для
паттерна, который отно-
сился бы именно к раз-
работке игр, но «Компо-
нент» — наиболее часто
употребляемый термин.
А поскольку паттерны,
по сути, всего лишь до-
кументирование суще-
ствующего опыта,
я не вправе вводить но-
вые термины. Будем ис-
пользовать термин
«Компонент» как XNA,
Delta3D и многие другие.
Do'stlaringiz bilan baham: |