10 советов и трюков GameMaker Studio 2. Часть 1.
Добро пожаловать в список из 10 трюков и советов по GameMaker Studio 2. Независимо от того, знакомы ли вы уже с этим движком или только начали его изучать, можно узнать что-то новое.
#1 Ссылка на конкретный экземпляр объекта
Функции создания экземпляров, такие как instance_create_layer и instance_create_depth - одни из самых основных функций, которые разработчики используют в Game Maker. Но не все знают, что они возвращают идентификатор созданного экземпляра, который можно сохранить в переменную для дальнейшего его использования.
var inst; inst = instance_create_depth(x, y, -10000, obj_Bullet); with (inst) { speed = other.shoot_speed; direction = other.image_angle; }
#2 Макросы и перечисления
Macros и Enums не нуждаются в вызове для инициализации - достаточно скрипта, в котором хранятся ваши макросы и энумераторы, и они будут загружены в ваш проект.
#3 Средняя кнопка мыши
Для экономии времени вы можете щёлкать средней кнопкой мыши на ресурс или функцию в редакторе кода. GMS2 откроет соответствующий объект или, если это функция, то страницу со справкой.
#4 Тернарные операторы в GameMaker Studio 2
GMS2 поддерживает тернарные операторы, которые предоставляют элегантный подход к условным выражениям: <условие>? <условие истинно>: <условие ложно>
// обычный подход if (standingOnIce) { friction = ice_friction; } else { friction = default_friction; } // тернарная операция friction = (standingOnIce ? ice_friction : default_friction);
#5 Сохранить результат выражения в переменной
Вместо использования оператора if вы можете заносить результат выражения сразу в переменную.
// обычный подход if (abs(speed) > 0) { moving = true; } else { moving = false; } // занесение результата в переменную moving = (abs(speed) > 0);
#6 Дельта-синхронизация в GameMaker
Дельта-синхронизация - это количество микросекунд, прошедших с последнего кадра. К примеру, вы можете связать перемещение с delta_time для обеспечения постоянной скорости движения на всех устройствах, независимо от частоты кадров.
var seconds_since_last_frame = (delta_time / 1000000); var distance_to_move_this_frame = (distance_per_second * seconds_since_last_frame); x += distance_to_move_this_frame;
#7 Поворот объекта "лицом" к курсору мыши
Простой пример, как постепенно поворачивать объект к курсору
var targetDirection = point_direction(x, y, mouse_x, mouse_y); var angleDifference = angle_difference(image_angle, targetDirection); var angleIncrement = 10; image_angle -= (min(abs(angleDifference), angleIncrement) * sign(angleDifference));
#8 Использование Clamp
Вместо использования операторов if для ограничения значения переменной, вы можете использовать Clamp, что гораздо удобней и умещается в одну строку.
// обычный подход if (spd > maxspd) { spd = maxspd; } else if (spd < 0) { spd = 0; } // метод с Clamp spd = clamp(spd, 0, maxspd);
#9 Мигание текста или спрайта
Простой способ для мигания спрайта или текста с заданным интервалом:
///@desc blink(c_white, c_black, 0.5); ///@arg on_val ///@arg off_val ///@arg [rate] var on_val = argument[0]; var off_val = argument[1]; var rate = (argument_count > 2 ? (argument[2] * 1000) : 1000); if (current_time % (rate * 2) >= rate) return on_val; return off_val;
#10 Шаблоны кода
В меню Preferences -> Objects вы можете создать шаблон, который будет использоваться по умолчанию для всех новых сценариев и событий. Это может сэкономить вам очень много времени.
CollectableItemData.cs
[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]