Если вы работаете с GameMaker, вы наверняка сталкивались с GML (GameMaker Language). Это мощный инструмент, который позволяет создавать игры, ограничиваясь только вашей фантазией. Но знаете, что часто упускают из виду даже опытные разработчики? Константы GML. Они кажутся мелочью, но на самом деле это настоящие «невидимые помощники», которые могут сделать ваш код чище, быстрее и понятнее. Давайте разберёмся, что это такое, зачем они нужны и как их правильно использовать.
Оглавление
Что такое константы и зачем они нужны?
Представьте, что вы пишете игру, где часто используете число 32. Это может быть размер тайла, скорость персонажа или что-то ещё. Каждый раз, когда вы пишете if (x < 32), вы рискуете ошибиться. А если вдруг решите, что 32 — это слишком мало, и захотите заменить его на 64? Придётся искать и менять каждое упоминание. Вот тут-то и приходят на помощь константы.
Константа — это именованное значение, которое не меняется в процессе выполнения программы. Вместо того чтобы писать 32, вы создаёте константу, например, TILE_SIZE, и используете её. Теперь, если нужно изменить значение, вы делаете это в одном месте, и оно автоматически обновляется везде. Удобно, правда?
Как объявлять константы в GML
В GameMaker константы объявляются с помощью ключевого слова #macro. Вот простой пример:
#macro TILE_SIZE 32 #macro PLAYER_SPEED 5 #macro MAX_HEALTH 100
Теперь вместо того чтобы писать 32, 5 или 100, вы используете TILE_SIZE, PLAYER_SPEED и MAX_HEALTH. Это не только упрощает чтение кода, но и делает его более гибким.
А знаете, что самое приятное? Константы в GML не занимают память во время выполнения игры. Они заменяются на свои значения ещё на этапе компиляции. Это значит, что вы получаете все преимущества без потери производительности.
Когда использовать константы?
Константы — это не просто способ избежать «магических чисел» (тех самых загадочных цифр, которые появляются в коде без объяснения). Они помогают структурировать ваш код и делают его более понятным. Вот несколько ситуаций, когда константы особенно полезны:
- Физические параметры игры: размеры объектов, гравитация, скорость.
- Состояния игры: например,
STATE_MENU,STATE_PLAY,STATE_GAME_OVER. - Коды ошибок или статусов:
ERROR_FILE_NOT_FOUND,STATUS_OK. - Цвета: вместо
c_blackможно создатьCOLOR_BACKGROUND.
Честно говоря, если вы видите в коде число или строку, которая повторяется больше двух раз, стоит задуматься о создании константы.
Константы vs Переменные: в чём разница?
На первый взгляд, константы и переменные кажутся похожими. Но разница между ними принципиальная. Переменные могут менять своё значение во время выполнения программы, а константы — нет. Они задаются один раз и остаются неизменными.
Например:
// Переменная health = 100; health = health - 10; // Теперь health = 90 // Константа #macro MAX_HEALTH 100 MAX_HEALTH = 90; // Ошибка! Так делать нельзя.
Использование констант помогает избежать случайных ошибок, когда значение изменяется там, где этого не должно происходить.


Лайфхаки для работы с константами
- Именование: используйте понятные имена в верхнем регистре с подчёркиваниями. Это общепринятая практика, которая делает код более читаемым.
- Группировка: если у вас много констант, связанных одной темой, объявляйте их вместе. Например, все константы, связанные с игровыми уровнями, можно разместить в одном месте.
- Комментарии: не забывайте пояснять, зачем нужна та или иная константа. Это особенно полезно, если над проектом работает несколько человек.
А что насчёт встроенных констант?
GameMaker уже предоставляет множество встроенных констант. Например, c_black, c_white для цветов или vk_space для клавиши пробела. Используйте их, чтобы не изобретать велосипед.
Но будьте осторожны: иногда встроенные константы могут быть переопределены. Например, если вы создадите свою константу с именем c_black, она перекроет встроенную.
Подводные камни
Константы — это здорово, но у них есть свои ограничения. Например, они не могут быть объектами или массивами. Также их нельзя использовать в выражениях, где требуется переменная.
#macro TILE_SIZE 32 x = TILE_SIZE * 2; // Работает x = TILE_SIZE + some_variable; // Ошибка!
Кроме того, константы не поддерживают сложные вычисления. Если вам нужно что-то посчитать, используйте переменные.
Заключение: почему константы — это must-have
Константы в GML — это не просто удобство, а необходимость для любого серьёзного проекта. Они делают ваш код чище, понятнее и легче в поддержке. А ещё они помогают избежать ошибок, которые могут стоить часов отладки.
Так что в следующий раз, когда увидите в своём коде «магическое число», не поленитесь создать константу. Ваш будущий я (и ваша команда) скажут вам спасибо.
А вы уже используете константы в своих проектах? Если нет, то самое время начать!



