1. Запрещено называть спрайты, объекты, фоны, комнаты и другие компоненты одинаковыми именами. Например, нельзя назвать спрайт именем
Player и объект игрока тоже именем
Player. В конце концов это неизбежно приведет к ошибке.
То же самое относится к переменным. Если название переменной совпадает с названием объекта, то это явная ошибка.
1.1. С недавних пор в GMS отключена чувствительность к регистру, то есть переменная
player + объект
Player = конфликт, переменные так называть нельзя. Также запрещены одинаковые названия локальных и глобальных переменных.
2. Запрещено называть спрайты, объекты и другие компоненты, а также локальные и глобальные переменные именами, совпадающими с зарезервированными словами, такими как стандартные переменные или названия функций. Например, нельзя назвать объект именем
score, lives или
health, так как все эти слова -
стандартные глобальные переменные. В конце концов это неизбежно приведет к ошибке.
Или переменные: нельзя, к примеру, количество повторений записать в переменную
global.repeat, так как
repeat - оператор повторения, зарезервированное слово.
2.1. (из стандартных правил программирования) Разрешается называть ресурсы и переменные именами, начинающимися с английской буквы или знака подчеркивания. Категорически запрещены цифры в начале имени, а также пробел и арифметические операции в любой части имени, например,
Room 1-1 или
Player_sprite_up+left. Желательно, избегать русских символов в именах ресурсов - код GM не поддерживает работу с такими ресурсами.
Чтобы определить, есть ли в проекте ошибки из 1 и 2 пунктов, выполните
Скрипты - Проверка имён ресурсов.
3. Практически во всех используемых спрайтах (особенно в движущихся) устанавливайте центр спрайта по центру. Для этого есть одноименная кнопка в редакторе спрайтов. Это поможет избежать некоторых ошибок в будущем, к примеру, если нужно будет повернуть спрайт с помощью переменной
image_angle - поворачивает спрайт вокруг его центра, поэтому если центр будет не в том месте, то объект будет неровно вращаться, то есть шататься из стороны в сторону.
Соблюдение правила также будет способствовать более точному расчету расстояния между объектами.
4. В играх жанра ТДС и Изометрия для движущихся объектов используйте маску в форме Диска, которая поможет избежать застревание в стенах при поворотах объекта. Для пуль (снарядов и т.д.) это тоже важно, так как Диск обеспечивает равноудаленность границ маски от центра спрайта, что в свою очередь обеспечивает одинаковую вероятность столкновения пули в любом направлении.
5. В играх жанра Платформер отключайте Точную проверку столкновения у движущихся объектов.Несоблюдение этого правила приведет к застреванию объектов в стенах и прочем.
Точная проверка также не нужна и для объектов, которые не взаимодействуют с другими объектами. Это касается игр любого жанра.Например, это могут быть осколки взорвавшихся вещей, дым и др. Соблюдение этого правила приведет к увеличению быстродействия игры.
Это же относится и к пунктам меню. Если будет включена
Точная проверка, то по надписи будет очень сложно попасть указателем мыши.
6. Не используйте переменную
health (
lives) для установки количества жизней нескольким объектам, чтобы позднее не возникали вопросы
"Когда у одного врага заканчивается здоровье, то исчезают все. Что мне делать? ".
Переменная
health (
lives, score и другие стандартные) -
глобальная, одна на всех. Используйте
локальные переменные, например,
hp, h, h_p или другие.
6.1. Кроме того, для отнятия этих жизней у объекта не рекомендуется использовать конструкцию
o_enemy.hp-=1, так как это отнимет здоровье совершенно не у того объекта, с которым сталкивается пуля (игрок, кулак, нога, меч...). Или же действие "Установить переменную" (серая кнопка VAR) с переключателем "Для объекта: o_enemy" - результат будет таким же нежелательным. Используйте переключатель "Для другого" или код
other.hp-=1.
Похожая ситуация бывает со взятием координат
o_enemy.x. Используйте конкретные функции поиска id, такие как instance_nearest, instance_place, collision_*, др.
7. Во всех спрайтах используйте функцию Трансформация -> Обрезка -> Рамка=0.Это отрежет ненужные области вокруг спрайта и уменьшит размер занимаемой им памяти, следствием чего будет увеличение быстродействия игры.
Также это способствует
равноудаленности границ спрайта от его центра (вместе с пунктом 3), а это тоже поможет избежать застревания в стенах, земле и прочем при развороте объекта (игрока).
В GMS это предотвратит некоторые графические проблемы в будущем разрабатываемого проекта.
8. Не пренебрегайте последовательностью выполняемых действий. Здесь абсолютно то же самое, как и чтение данной статьи - что написано в следующей строке неизвестно, пока ее не прочесть. Так же и в GM - например,
hp+=1; hp=100; - GM не имеет понятия, что это за переменная
hp, так как она определяется только после операции над ней. Разумеется, последовательность важна не только в коде, но и в кнопках (элементах) в поле действий объекта.
9. Не включайте свойство Твердости у объекта без необходимости.Особенно это касается движущихся объектов. К примеру, если твердость будет включена у игрока, то это грозит очень неудобным управлением. Твердость используется в объектах, которые большую часть времени неподвижны, то есть это могут быть стены, земля, деревья и т.д.
10. Для остановки объекта не используйте кнопки Move Fixed или Move Free, так как они кроме скорости еще устанавливают направление. Используйте кнопку со словом
VAR, в которой уставливайте переменной
speed значение
0.
Несоблюдение этого правила влечет за собой ошибку, в результате которой возникают вопросы следующего содержания: "Игрок стреляет нормально, когда перемещается. Но если остановится, то стреляет
только вправо. Помогите плиз.
"
PS: Похожая тема рассказывает о недопущении ошибок в коде. Данная же тема описывает основы построения игры, в результате которого возникают одинаковые ошибки, избежать которые можно, соблюдая вышеуказанные советы.
Автор: FanTom.
Запрещается копирование данной статьи без ведома и согласия автора.