Привет, друг!
Следующий цикл руководств расскажет как сделать свою SmashTV-style игру в Gamemaker!
Сегодня мы разберемся с интерфейсом Gamemaker и создадим персонажа, сделаем ему возможность передвигаться по комнате.
С четырех сторон идут враги, а мы должны стрелять в них и выбивать усиления. Как таймер закончится, можно будет переходить на другой уровень!
Для начала запустим Gamemaker и создадим новый проект.
Кликаем по нужной папке правой кнопкой и создаем новый спрайт.
В появившемся окне вверху слева можно указать имя спрайта. Назовем его “sPlayer”, потому что это Спрайт Игрока. Кроме этого там же можно отредактировать размер спрайта. Уменьшим его до 16 на 16 пикселей, чтобы меньше тратить времени на рисование спрайта, а также соответствовать духу старых аркадных игр.
Затем нажимает “Применить”, наш холст уменьшается до 16 на 16. Можно нажимать кнопку “Редактировать” возле имени спрайта!
Окно редактирования спрайта можно условно разделить на 4 зоны:
Вверху слева - кадры анимации, вверху справа - размер кисти и палитры, а под ними - инструменты. В центре располагается сам холст спрайта, на котором мы будем рисовать персонажа. Чтобы добавить новый кадр, надо нажать на плюсик вверху слева, где находятся все кадры.
В предыдущем руководстве про дизайн персонажа я рассказывал, как создавать персонажа, так что тут не задержимся. Рисуем!
Мы нарисуем с вами 2 спрайта:
1 - для персонажа, когда он стоит на месте.
2 - для персонажа, когда он двигается.
У всех спрайтов нашего персонажа сразу будет 4 стороны. Так будет проще, чем рисовать отдельно спрайты для каждой стороны персонажа! 1 кадр - персонаж смотрим направо. Остальные идут против часовой. Все просто! Я нарисую для стоячего спрайта по 4 кадра на каждую сторону. Почему бы и нет!
Создадим новый спрайт, дадим ему имя “sPlayerRun” - это будет спрайт для передвижения игрока. Дадим ему размер 16 на 16 и изменим предыдущему и этому спрайту скорость анимации. По умолчанию она 30 кадров в секунду. Нам хватит и меньше.
Вот такой у меня вышел спрайт для передвижения игрока.
Теперь можно приступать к программированию!
В папках справа найдем папку “Объекты” - “Objects”.
Создадим новый объект по аналогии со спрайтом. Разница лишь в том, что мы создаем не спрайт, а объект.
Окно объекта имеет имя, присвоенный ей спрайт, настройки и события.
Изменим имя объекта на “oPlayer”, так как это уже не спрайт, а ОБЪЕКТ игрока.
И присвоим спрайт персонажа “sPlayer”. Для этого нажимаем на “нет спрайта” и выбираем нужный. Или просто перетащим
спрайт в это окно!
Теперь создадим события.
События в Gamemaker - это особые места, куда нужно писать программный код.
События срабатывают тогда, когда должны, последовательно выполняя код, который в них записан.
Так есть событие “создать”. Оно срабатывает всего один раз, когда объект впервые “создается” в игре.
Есть событие “уничтожить” срабатывает один раз при уничтожении объекта. Например, можно указать, что при уничтожении монстра из него выпадут монетки.
Или есть событие “столкновение”. В нем можно указать, что если игрок столкнется с монстром - он получит урон и его очки здоровья уменьшатся.
Создадим для начала событие “Создать”, ведь в нем нам надо заинициализировать первый переменные, необходимые для работы нашего кода!
Создадим там следующие переменные. Что такое переменные?
Переменная - это имя для хранимых в оперативной памяти компьютера данных, по которому мы можем обращаться к ним неоднократно. Я люблю представлять их как контейнеры, в которые можно положить что угодно. Так, мы знаем, что в шкафу мы храним одежду, а в ящике кухни - посуду.
Напишем в событии “создать” следующее:
image_speed = 0; - Скорость нашего изображения будет равна нулю, чтобы он сам по себе не вернется на месте!
hSpeed = 0; - горизонтальная скорость персонажа
vSpeed = 0; - вертикальная скорость персонажа
speedWalk = 2; - скорость ходьбы - это скорость перемещения нашего персонажа во время ходьбы
spriteIdle = sPlayer; - спрайт для “стоим на месте”
spriteRun = sPlayerRun; - спрайт для “идем куда-то”
Эти строчки могут выделяться желтым восклицательным знаком, который предупреждает, что мы еще нигде не использовали эти переменные. “А давай удалим их тогда” - подсказывает Gamemaker. Мы можем игнорировать эти его подсказки, так как мы знаем, что сейчас будем эти переменные использовать:)
Теперь создадим, собственно, само передвижение игрока. Подумаем логически. Когда мы ходим передвигаться? Когда нажимаем на клавиши. Когда? В любой промежуток времени. Тут “создать не подойдет”, ведь это событие срабатывает только 1 раз.
Тут нам подойдет либо события на нажатие клавиши, либо “шаг”.
Первый вариант неплох и понятен, но придется писать код для каждой клавиши отдельно. Я так не люблю делать. Давайте напишем наш код в “Шаге”.
Шаг - событие, которое выполняет код каждый игровой кадр. В нашем случае - 60 раз в секунду, так как по умолчанию в играх 60 кадров в секунду.
Обращу внимания, что я пишу в событии “шаг”.
Обычный шаг, а не “начало шага” или “завершить шаг”.
Создадим еще 4 переменные. Они будут хранить, какие клавиши мы будем использовать. “WASD” - это типичная и распространенная раскладка для передвижения.
Полагаю, английский ты знаешь, друг? “keyboard_check” переводится как “проверка клавиатуры”. Обрати, внимание, что эта надпись выделяется оранжевым. В Gamemaker цвет очень помогает программистам.
Переменные обозначаются синим.
Функции - оранжевым.
Функции выполняют какие-либо действия, так что их можно назвать “глаголами программирования”.
keyboard_check проверяет, нажата ли данная (помещенная внутрь нее) клавиша.
Если да - то она говорит “1”, а если нет - то “0”.
Соответственно, наши переменные “keyLeft” и прочие - хранят в себе просто число “1” или “0” - условные “да” и “нет”. Всё просто!
Теперь добавим еще пару строчек.
Тут я обозначил еще две переменные.
InputDirection будет хранить у нас куда игрок вообще смотрит? Одну из 4 сторон. Как раз для этого мы и рисовали спрайты на 4 стороны сразу:)
InputMagnitude будет проверять, не нажаты ли случайно две противоположенные клавиши? Например, если подставить значения, то можно заметить, что если игрок нажимает одновременно “иди налево” и “иди направо” (“A”и “D”), то inputMagnitude выдаст 0, так как 1-1 = 0, а нужно, чтобы был не равен.
Справка: Знак “!=” обозначает неравенство.
В Gamemaker “!” вообще обозначает “не” и его можно поставить еще много перед чем;)
Ну что? Допишем наш код?
Последние 4 строчки говорят о том, что в hSpeed и vSpeed - будут входить переменные, увеличия показатель до speedWalk.
И самое главное, что x и y - координаты нашего объекта игрока будут меняться на значения hSpeed и vSpeed.
В Gamemaker вверху слева x и y у комнат имеют значения 0.0
Значения X увеличиваются вправо, а влево уменьшаются.
Значения Y увеличиваются внизу, а вверху уменьшаются.
Всё готово! Анимация игрока еще не будет работать. Её оставим на следующую статью!
Давайте проверим, запустив игру. Что для этого еще нужно?
Зайдем с вами в папку “Комнаты”. Там будет комната под названием “Room1”.
Это базовая комната в Gamemaker. Давайте кликнем по ней два раза левой кнопкой мыши, зайдя в нее.
В комнату перенесем наш объект игрока. Да, прям из папки! Переносим на черное полотно комнаты. Почему бы не положить его в центр?
Мы еще наведем красоту в нашей локации, не переживай, друг мой. Пока оставим комнату черной.
А чтобы запустить игру надо просто нажать “F5” или кликнуть на запуск вверху слева интерфейса Gamemaker.
Запускаем и проверяем!
Итог: сегодня мы разобрались в интерфейса Gamemaker, создали спрайта персонажа и запрограммировали его на движение при нажатии “WASD”.
Мы узнали, что такое события в объектах, что такое переменные и функции.
Потрясающая работа, друг мой!
В следующей статье мы вдохнем в нашего персонажа анимацию!
Увидимся!