Ещё 10 советов и трюков GameMaker Studio2. Часть 2
Добро пожаловать в продолжение списка трюков и советов по GameMaker Studio 2. Независимо от того, знакомы ли вы уже с этим движком или только начали его изучать, можно узнать что-то новое.
#11 Подключите Твиттер!
Игроки смогут отправлять посты в Твиттер прямиком из игры. Например, о количестве набитых очков.
///tweet_score(); var tweet = "I scored " + string(score) + " points in this game!"; url_open_ext("https://twitter.com/intent/tweet?text=" + string(tweet), "_blank");
Для получения дополнительной информации посетите этот сайт
А так же не забудьте сначала сделать специальный URL. Больше информации
#12 Как разделить тысячные в числе
Пример, как вставить запятые в числа для разделения тысячных (например, 1234567 -> 1,234,567):
/// @function add_commas(integer, separation); /// @description Insert commas in a number, from right to left, every separation spaces /// @param {real} The input value /// @param {real} Number of digits grouped between commas var str = string(argument0); var sep = argument1; for (var i = string_length(str) - (sep - 1); i > 1; i -= sep) { str = string_insert(",", str, i); } return str;
#13 Используйте инверсию логических переменных
Это уменьшает количество кода, и действительно очень удобно!
if (keyboard_check_pressed(ord("S"))) sndEnabled = !sndEnabled;
В приведенном выше примере переменная sndEnabled переключается между истиной и ложью при каждом нажатии клавиши S.
#14 Автоматическое форматирование кода
Просто вставьте свой код по ссылке ниже, и он автоматически красиво оформится!
http://jsbeautifier.org
Отлично работает для GML, не взирая что он предназначен для JavaScript.
#15 Камера как в Nuclear Throne
Пример камеры, которая напоминает ту, что была в игре Nuclear Throne. Этот фрагмент кода центрирует камеру, между obj_player и курсором мыши.
var cam = view_camera[0]; var xpos = (obj_player.x + ((mouse_x - obj_player.x) / 2)) - camera_get_view_width(cam) / 2; var ypos = (obj_player.y + ((mouse_x - obj_player.y) / 2)) - camera_get_view_height(cam) / 2; camera_set_view_pos(cam, xpos, ypos);
#16 Ремапинг диапазонов чисел
Переназначение числа arg0 из одного диапазона (arg1,2) в другой (arg3,4).
/* value = 110; m = Map(value, 0, 100, -20, -10); // m = -9 */ ///Map(val, min1, max1, min2, max2) return argument3 + (argument4 - argument3) * ((argument0 - argument1) / (argument2 - argument1));
#17 Инкрементное вращение на 45 градусов
Код для поворота спрайта к направлению мыши, с шагом в 45 градусов, для 8-сторонней ориентации.
var dir = point_direction(x, y, mouse_x, mouse_y); image_angle = round(dir / 45) * 45;
#18 Шестнадцатеричный цвет в GMS
Вначале изучения GameMaker, у многих возникают сложности с понятием в нём кода цвета. GameMaker хранит цвета в формате "little endian". Из-за этого цветам назначается $BBGGRR вместо шестнадцатеричного #RRGGBB:
Желтый в HEX: #FFFF00
Желтый в GMS: $00FFFF
#19 Точность чисел
Как бы это ни звучало странно, не всегда операция 0.5 + 0.5 выдаст результат 1 для переменных с плавающей точкой, а на самом деле что-то вроде 1.000000000001.
Чтобы обойти это, вы используйте функции floor() или round() для фиксации целого значения.
#20 Выражения и функции GameMaker оцениваются по-разному при использовании компилятора YoYo
При использовании компилятора YoYo все выражения и функции оцениваются слева направо. На всех других платформах они оцениваются справа налево.
Например, такой код даст разные результаты в зависимости от платформы:
val = max(num, ++num, num++);
Смотрите также:
Комментарии
В 12 подсказке, что то не так с кодом... Толи название переменной не то где то используется, толи логика
В 13 код и текст немного разнятся, не критично, но может путать)
В 16 можно подробнее о чем речь? Это получается что то вроде перевода единицы измерения аля цельсий - > кельвин?
На счёт 19. А что если сравнивать два флоата? В GMS есть такая же проблема как и в других языках?
alexprey,
12 - Опечатка (set -> sep), фиксед
13 - Фиксед)
14 - Это скрипт для изменения числа в определённом ранге (на определённое число из заданного ранга)
19 - Здесь я что-то конкретного не скажу, кроме что в GMS нельзя задать тип переменной, из-за этого может произойти штука, описанная в пункте. Можно просто запомнить, что если число точно Int, то стараться его сразу округлять floor'ом
CollectableItemData.cs
[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]