Открыть сервисСервис

Триггеры в GameMaker: Studio

Триггеры в GameMaker — механизм событийного программирования, встроенный в среду разработки GameMaker (ранее GameMaker: Studio), позволяющий запускать фрагменты кода при наступлении определённых условий: столкновении объектов, вводе игрока, изменении счётчика, истечении таймера и других ситуациях. Триггеры являются основой реактивной логики в играх, создаваемых на GameMaker, и реализуются как в графическом режиме GML Visual (ранее Drag and Drop), так и в скриптовом языке GML (GameMaker Language).

Основные типы событий

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

Стандартные события

СобытиеВыполняется
CreateОдин раз при создании экземпляра объекта
StepКаждый кадр (до 60 раз в секунду и чаще)
DrawКаждый кадр во время отрисовки сцены
CollisionПри столкновении с указанным объектом
Keyboard / Key PressПри нажатии или удержании клавиши
AlarmПо истечении заданного количества шагов
Other (User Events, Async)По внешним сигналам: завершению загрузки, получению данных и т.д.

Условные запуски внутри Step

Помимо отдельных событий, условная логика часто встраивается в событие Step с помощью операторов if, switch и проверок переменных. Это позволяет реализовывать триггеры произвольной сложности: например, запуск кат-сцены при достижении игроком определённой координаты или открытие двери при наличии у персонажа трёх ключей.

Триггеры в GML Visual

До перехода на чистый код триггеры удобно собирать в режиме GML Visual — визуальном редакторе, где логика собирается из перетаскиваемых блоков. Типовые блоки-триггеры включают:

  • If Variable — проверка значения переменной;
  • If Collision — проверка столкновения без фактического события столкновения;
  • If Input — проверка нажатия клавиши, кнопки геймпада или касания экрана;
  • Compare Count — сравнение счётчика (например, очков) с заданным порогом;
  • Set Alarm — запуск отложенного действия через заданное число шагов.

Такой подход не требует знания синтаксиса GML и подходит для прототипирования.

Триггеры на GML

В коде триггеры реализуются несколькими способами.

Проверка условий в Step

```gml /// Step Event if (keyboard_check_pressed(vk_space)) { if (can_jump) { vy = -jump_force; can_jump = false; } }

if (place_meeting(x, y + 1, obj_ground)) { can_jump = true; } ```

Здесь прыжок срабатывает как триггер: одновременно должны выполняться нажатие пробела и наличие опоры под ногами.

Триггеры на столкновениях

Событие Collision с объектом obj_enemy содержит код, который выполняется только при фактическом пересечении масок:

``gml /// Collision with obj_enemy hp -= 1; invulnerable = true; alarm[0] = room_speed; // неуязвимость 1 секунда ``

Пользовательские события

Для переиспользуемых триггеров применяются User Events (0–15), вызываемые через event_user(n). Это позволяет отделить «детектор» условия от «обработчика» реакции.

Асинхронные триггеры

События категории Other, например Async HTTP или Async Dialog, срабатывают по завершении внешней операции — загрузки файла, сетевого запроса, показа системного диалога. Такие триггеры нельзя эмулировать в Step, поскольку результат операции заранее неизвестен.

Таймеры и счётчики

Триггером часто служит объектный таймер, реализуемый через встроенную систему Alarm. Команда alarm[0] = 30 запускает событие Alarm 0 через 30 шагов. Типовые сценарии: откат стрельбы, появление волны врагов, автоматическое сохранение.

Счётчики (global variables, score, lives) работают как пороговые триггеры: при изменении значения наступает момент для проверки условия победы или поражения.

Практические рекомендации

  • Триггеры, проверяемые каждый кадр, желательно размещать в Step одного объекта-менеджера, а не размазывать по множеству экземпляров.
  • Для одноразовых триггеров используйте флаг used или уничтожайте объект-источник после срабатывания.
  • При частых проверках столкновений полезно ограничивать область поиска через collision_rectangle вместо place_meeting.
  • Порядок выполнения кода внутри события определяется порядком следования действий; при сложной логике полезно разбивать код на скрипты (Script Assets).

Историческая справка

Система событий и триггеров сформировалась ещё в первой версии GameMaker (Mark Overmars, 1999) и с минимальными изменениями дожила до GameMaker 2022+, что делает её одной из самых стабильных концепций в этой среде разработки.

Источники:

  • Руководство GameMaker (docs.gamemaker.io) — разделы Events, GML, Collisions
  • Руководство пользователя GameMaker Studio 2
  • GameMaker Language Reference (YoYo Games)
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru