Глава 14. Компонент (Component)
Глава 15. Очередь событий (Event Queue)
Глава 16. Локатор служб (Service Locator)
Для создания успешно работающей программы доста-
точно знать основы языка. Но вот для кода, в который
легко внести коррективы в случае
изменения
требова-
ний, основ уже мало. Крайне редко нам доступна рос-
кошь знать точный набор всей необходимой функцио-
нальности до запуска редактора.
Мощный инструмент, позволяющий упростить про-
цесс внесения изменений, —
уменьшение связанности
.
Когда мы называем две части кода «расцепленными»,
то имеем в виду, что внесение изменений в одну часть
не требует изменений в другой. И чем меньше частей,
которые приходится затрагивать при добавлении в игру
новой функциональности, тем вам проще.
Паттерн Компонент (Component) (с. 272) уменьшает
связанность различных областей игры с помощью еди-
ной сущности, включающей все аспекты. Паттерн Оче-
редь событий (Event Queue) (с. 296) уменьшает связан-
ность отдельных объектов, взаимодействующих друг
с другом как статически, так и
во время выполнения
.
Паттерн Локатор служб (Service Locator) (с. 321) позво-
ляет получить доступ к функции без привязки к предо-
ставляющему ее коду.
Часть V
272
Компонент (Component) —
Паттерны программирования игр
Компонент
(Component)
«Позволяет одной сущности охватывать несколько
областей без связывания этих областей друг
с другом».
Мотивация
Допустим, мы создаем платформер. Приключениями
итальянских сантехников Марио и Луиджи уже никого
не удивить, поэтому мы возьмем датского пекаря Бьйор-
на. Логично предположить, что у нас будет представля-
ющий дружелюбного кондитера класс, который станет
содержать вообще все составляюшие игры.
Поскольку игрок контролирует действия главного ге-
роя, нам понадобится считывать пользовательский ввод
и превращать его в движение. И, конечно, герою надо
взаимодействовать с уровнем, так что тут мы коснемся
физического движка и обработки взаимодействия. Когда
мы с этим покончим, нам потребуется отобразить резуль-
тат на экране, то есть время для анимации и рендеринга.
Весьма вероятно, нам захочется использовать еще и звук.
Подождите минутку. Вам не кажется, что все выхо-
дит из-под контроля? Принципы архитектуры программ-
ного обеспечения говорят о необходимости изолировать
друг от друга разные области игры. Если мы пишем тексто-
вый редактор, то код, ответственный за печать докумен-
тов, никоим образом не должен касаться кода, который
отвечает за их загрузку и сохранение. У игры другие об-
ласти, но данное правило все равно важно соблюдать.
Системы ИИ, физики, рендеринга, звука и любые
другие системы не должны знать о существовании друг
Глава 14
Именно такие потря-
сающие идеи стали при-
чиной того, что я про-
граммирую, а не создаю
сюжет для игр.
Do'stlaringiz bilan baham: |