Game Maker: язык программирования GML и его возможности

Язык программирования, используемый в 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() перед обращением к чужим переменным.

📊 Как вы планируете изучать GML?
Только GML Code (текстовый код)
Начну с GML Visual (блоки)
Комбинирую оба подхода
Ещё не решил

Ключевые события и порядок их выполнения

Чтобы писать рабочий код, необходимо понимать, когда срабатывает каждое событие. Событие 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 — что проверить

Выполнено: 0 / 5

Официальная справка, встроенная в среду разработки, открывается клавишей 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 справится отлично.