Центральная шина событий
Большинство игр, в отличие от данной, не основаны
на управлении событиями. Хотя большинство все равно
имеют собственную очередь событий, словно позвоноч-
ник для нервной системы. Вы можете услышать употреб-
ление таких терминов, как «центральная», «глобальная»
или «главная». Они используются в высокоуровневом
А
прерывания,
вызван-
ные операционной си-
стемой, наоборот, рабо-
тают
именно
так. Когда
возникает событие пре-
рывания, ОС останавли-
вает любой процесс ва-
шего приложения
и заставляет его пере-
скочить в код обра-
ботки прерывания.
Именно из-за такой об-
рывистости с прерыва-
ниями достаточно
сложно работать.
Если вам интересно,
по-
чему
они не являются
событийно-управля-
емыми, обратитесь
к главе «Игровой цикл
(Game Loop)» (с. 161).
298
Очередь событий (Event Queue) —
Паттерны программирования игр
взаимодействии между игровыми системами, чтобы
те оставались не связанными.
Предположим, в игре есть система обучения, которая
отображает подсказки при наступлении определенных
внутриигровых событий. Например, когда игрок убива-
ет своего первого монстра в игре, высвечивается окош-
ко «Нажмите Х, чтобы собрать добычу!».
Скорее всего, ваш код игрового процесса и сражений
и без того достаточно сложный. И совершенно точно вы
не хотели бы его еще усложнять бесконечными провер-
ками для срабатывания обучающих подсказок. Исполь-
зуйте центральную очередь событий. Любая игровая си-
стема может отправлять туда сообщения, поэтому код,
ответственный за сражение, будет просто сигнализи-
ровать «враг мертв» каждый раз, когда игрок поражает
очередного противника.
Любая система может
получать
события из очереди.
Движок обучающей системы регистрируется в очереди
и сообщает ей, что хочет получать информацию о собы-
тиях «враг мертв». Таким образом, информация о смер-
ти врага передается из системы сражения в обучающую
систему без их непосредственного взаимодействия.
Рис. 15.2.
Система сражений и обучающая система
взаимодействуют через общую очередь
Я думал использовать это как пример в оставшейся
части главы, но на самом деле я не фанат таких больших
глобальных систем. Очереди событий не обязательно
должны создаваться для взаимодействия во всем игро-
вом движке. Они могут быть полезными и в рамках од-
ного класса или пространства.
Систему обучения неве-
роятно сложно внедрить
должным образом.
Да и большинство игро-
ков не удосуживаются
обращать на нее внима-
ние, так что это выгля-
дит как простая трата
времени. Но та часть
пользователей, которой
данная система необхо-
дима, в итоге будет вам
сильно благодарна, ведь
их знакомство с игрой
станет проще и прият-
нее.
Такая модель — с общим
пространством, куда
сущности могут поме-
щать информацию или
получать о ней уведом-
ления, — похожа на си-
стему искусственного
интеллекта с
доской объ-
явлений
.
Do'stlaringiz bilan baham: |