Триггеры в 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)
