Язык программирования, используемый в GameMaker, называется GML (GameMaker Language) — именно на нём пишутся скрипты, логика объектов и вся игровая механика внутри среды разработки от YoYo Games. Если вы открыли редактор и не понимаете, что писать в окне кода события Create или Step, начинать нужно с базовой структуры GML: переменных, условий и встроенных функций движка.
GameMaker изначально создавался как инструмент для новичков, поэтому GML спроектирован максимально простым: он прощает мелкие ошибки синтаксиса, не требует объявления типов переменных и позволяет увидеть результат буквально через минуту после написания кода. При этом на нём созданы коммерчески успешные проекты, что доказывает — язык подходит не только для обучения, но и для серьёзной разработки 2D-игр.
Что такое GML и как он устроен
GML — это интерпретируемый скриптовый язык, встроенный в движок GameMaker. По синтаксису он напоминает смесь JavaScript и Pascal: присваивание выполняется через знак равенства, блоки кода выделяются фигурными скобками, а строки завершать точкой с запятой не обязательно (хотя считается хорошим тоном).
Язык существует в двух вариантах использования: GML Code (классическое написание кода текстом) и GML Visual (визуальное программирование блоками, ранее известное как Drag and Drop). Оба подхода генерируют один и тот же внутренний код, поэтому проект можно начать на визуальных блоках, а затем перейти к текстовому программированию.
// Пример простого кода на GML
speed = 4;
if (keyboard_check(vk_right)) {
x += speed;
}
Фрагмент выше показывает типичную логику движения персонажа: переменной speed присваивается значение, а встроенная функция keyboard_check() проверяет, зажата ли клавиша стрелки вправо. Заметьте — никаких объявлений типов и импорта библиотек не требуется.
Объекты, события и переменные — основа языка
Вся архитектура GameMaker построена на объектах и событиях. Объект — это сущность игры (персонаж, враг, кнопка меню), а события определяют, когда именно выполняется код: при создании объекта, каждый кадр, при столкновении или нажатии клавиши.
Переменные в GML делятся на несколько типов по области видимости, и понимание этой разницы критично для новичков:
- 🔹 Обычные переменные объекта — создаются простым присваиванием (
hp = 100;) и живут, пока существует экземпляр объекта - 🔹 Временные переменные — объявляются через
varи уничтожаются после завершения скрипта или события - 🔹 Глобальные переменные — пишутся с префиксом
global.(например,global.score) и доступны из любого объекта - 🔹 Встроенные переменные —
x,y,speed,image_angleи другие, которые движок обрабатывает автоматически
⚠️ Внимание: частая ошибка новичков — попытка прочитать переменную другого объекта напрямую. Если объекта с таким именем нет в комнате или экземпляров несколько, игра выдаст ошибку или вернёт непредсказуемое значение. Используйте проверку
instance_exists()перед обращением к чужим переменным.
Ключевые события и порядок их выполнения
Чтобы писать рабочий код, необходимо понимать, когда срабатывает каждое событие. Событие Create выполняется один раз при появлении экземпляра — здесь инициализируют переменные. Событие Step запускается каждый кадр, и именно туда помещают основную игровую логику: движение, проверку условий, реакцию на ввод.
Событие Draw отвечает за отрисовку. Если вы создали это событие в объекте, движок перестаёт рисовать спрайт автоматически — отрисовку придётся прописывать вручную через draw_self() или другие функции рисования.
| Событие | Когда выполняется | Типичное применение |
|---|---|---|
| Create | Один раз при создании экземпляра | Инициализация переменных, стартовые значения |
| Step | Каждый кадр игры | Движение, логика, проверка условий |
| Draw | Каждый кадр при отрисовке | Вывод спрайтов, текста, интерфейса |
| Collision | При столкновении с другим объектом | Урон, подбор предметов, отскок |
| Destroy | При уничтожении экземпляра | Эффекты смерти, начисление очков |
Основные конструкции языка
Синтаксис GML включает стандартный набор конструкций, знакомый по другим языкам: условия if/else, циклы for, while, repeat, оператор switch и функции. Современные версии GameMaker поддерживают также структуры, массивы, конструкторы и методы, что сближает GML с полноценными языками общего назначения.
Функции объявляются ключевым словом function и могут храниться как в скриптах, так и внутри объектов. Вот пример пользовательской функции:
function calculate_damage(base, multiplier) {
var result = base * multiplier;
return result;
}
- ⚙️ Условия —
if (hp <= 0) { instance_destroy(); } - 🔁 Циклы —
for (var i = 0; i < 10; i++)для повторяющихся действий - 📦 Массивы —
inventory[0] = "меч";для хранения наборов данных - 🧩 Структуры — позволяют группировать данные наподобие объектов в других языках
С чего начать изучение GML
Оптимальная стратегия — учиться на практике, а не читать справку от корки до корки. Начните с простого проекта: например, игра, где персонаж двигается по экрану и собирает предметы. Такой проект задействует большинство базовых механик: события, переменные, столкновения и отрисовку.
☑️ Первый проект на GML — что проверить
Официальная справка, встроенная в среду разработки, открывается клавишей F1 и содержит описание каждой функции с примерами. Дополнительно стоит изучить официальные обучающие материалы YoYo Games — они бесплатны и рассчитаны именно на новичков без опыта программирования.
⚠️ Внимание: обучающие материалы для старых версий (GameMaker 8, GameMaker: Studio 1.x) могут содержать устаревшие функции, которых нет в актуальной версии GameMaker. Перед использованием кода из старого туториала сверяйтесь со справкой вашей версии — многие функции были переименованы или удалены.
Чем GML отличается от других языков для геймдева
GML проще C++ и C# за счёт отсутствия ручного управления памятью и строгой типизации, но он привязан исключительно к движку GameMaker — код не перенесёшь в Unity или Unreal. Зато скорость прототипирования на GML заметно выше: простую механику можно проверить за минуты. Для 2D-игр этого инструмента обычно достаточно, а для 3D-проектов движок подходит ограниченно.
Типичные ошибки новичков в GML
Большинство проблем начинающих связано не со сложностью языка, а с непониманием логики движка. Например, код, написанный в событии Create вместо Step, выполнится лишь один раз — и проверка нажатия клавиш «не будет работать», хотя синтаксически всё верно.
Ещё одна частая ситуация — обращение к obj_player.x, когда в комнате несколько экземпляров этого объекта или ни одного. В первом случае вы получите значение только одного экземпляра, во втором — ошибку выполнения. Всегда проверяйте существование экземпляра и используйте with или instance_find для точного обращения.
Также обращайте внимание на разницу между операторами = и == : в GML оба часто работают как сравнение внутри условий, но присваивание внутри if — классический источник трудноуловимых багов. Привычка всегда писать == в условиях избавит от многих часов отладки.
FAQ: частые вопросы о языке GameMaker
Какой язык программирования используется в GameMaker?
В GameMaker используется собственный язык GML (GameMaker Language). Он существует в двух формах: текстовый код (GML Code) и визуальные блоки (GML Visual). Оба варианта взаимозаменяемы и генерируют одинаковый внутренний код движка.
Сложно ли выучить GML с нуля?
GML считается одним из самых простых языков для старта в программировании: нет строгой типизации, не требуется управление памятью, а результат виден сразу в запущенной игре. Базовые конструкции — переменные, условия, циклы — осваиваются за несколько дней практики на простом проекте.
Можно ли создать коммерческую игру на GML?
Да, на GameMaker созданы известные коммерческие проекты. Лицензионные условия зависят от выбранного тарифа и платформ экспорта, поэтому перед публикацией проверьте актуальные условия на официальном сайте разработчика движка.
Что лучше для новичка: GML Code или GML Visual?
GML Visual подходит для понимания логики событий без изучения синтаксиса, но текстовый код даёт больше гибкости и быстрее в работе на сложных проектах. Разумный путь — начать с блоков, а затем перейти на GML Code, когда станет понятна структура событий и объектов.
Подходит ли GML для 3D-игр?
Движок GameMaker ориентирован преимущественно на 2D-разработку. Технически базовые 3D-возможности существуют, но для полноценных 3D-проектов обычно выбирают другие движки. Если ваша цель — 2D-платформеры, рогалики или головоломки, GML справится отлично.