Найти в Дзене
7heKo7Go7

Game Maker. Урок #4. "Создаём игру с нуля".

Не волнуйтесь, начиная с Урока №5 качество статей улучшилось! Вместо скриншотов, появились гифки, теперь уроки стали нагляднее. Приятного просмотра! В этом уроке мы создадим небольшую игру, чтобы понять основной принцип работы и разберемся с трудностями, которые могут возникнуть при создании. 1. Итак, для начала создаём спрайт игрока, когда он стоит. Как его создавать, можете посмотреть в первом и во втором уроках. Это спрайт нашего будущего игрока. По стандарту нажимаем на кнопку "По центру", чтобы в будущем на заданных координатах объект становился центром на это место. По желанию точку можно поставить посередине снизу или в любом другом месте. Маска объекта, а точнее маска спрайта. Маска простыми словами - это контур нашего спрайта, который сталкиваясь с "твердыми" объектами (у которых включен параметр твердости) не даёт проходить сквозь себя. Кратко говоря - это контур столкновения. Показать столкновение - выделить спрайт тёмным цветом где наложена маска. Маску можно сделать по
Оглавление

Не волнуйтесь, начиная с Урока №5 качество статей улучшилось! Вместо скриншотов, появились гифки, теперь уроки стали нагляднее. Приятного просмотра!

В прошлых уроках мы научились пользоваться программой Game Maker.

В этом уроке мы создадим небольшую игру, чтобы понять основной принцип работы и разберемся с трудностями, которые могут возникнуть при создании.

1. Итак, для начала создаём спрайт игрока, когда он стоит. Как его создавать, можете посмотреть в первом и во втором уроках.

Это спрайт нашего будущего игрока. По стандарту нажимаем на кнопку "По центру", чтобы в будущем на заданных координатах объект становился центром на это место. По желанию точку можно поставить посередине снизу или в любом другом месте.

Создаём спрайт персонажа
Создаём спрайт персонажа

Дополнительная информация:

Маска объекта, а точнее маска спрайта. Маска простыми словами - это контур нашего спрайта, который сталкиваясь с "твердыми" объектами (у которых включен параметр твердости) не даёт проходить сквозь себя. Кратко говоря - это контур столкновения.

Маска
Маска

Показать столкновение - выделить спрайт тёмным цветом где наложена маска.

Маску можно сделать по форме "Точную", "Прямоугольную", в форме "Диска" или "Алмаза".

Также есть в рамочке "Главный" шкала "Альфа Толерант.". С этой шкалой можете сами поэкспериментировать, например при форме "Точная" маска будет не прямоугольная, а по краю рисунка. Если есть на спрайте прозрачные детали, то маска будет как-то ещё изменяться. (Примечание: эта шкала меняет маску только при форме "Точная")

Сепаратор масок - он нужен для того, чтобы для каждого кадра отдельно вычислялась маска столкновений (если в спрайте есть анимация). Но я не советовал бы включать его, т.к. могут появится большие проблемы с залипанием и застреванием игрока в стенах, объектах и тд.

Если включить "Сепаратор столкновения" и если у нас анимированный спрайт, то при каждой смене кадра, маска будет подстраиваться под контур изображения кадра. (Я сам не проверял, но судя по форумам это так)

Рамочка "Рамка". Автоматическое - маска объекта накладывается по максимальному размеру нарисованного изображения. Полное - если вокруг есть пустое пространство без пикселей, то маска захватит и его. Пример - введите свои значения в окошки, чтобы ограничить маску с краёв.

Итак, по стандарту поставим форму "Прямоугольник", шкалу не трогаем, сепаратор без разницы (т.к. стоит "Прямоуг-к", а не "Точный"), Ставим галочку на "Точная проверка столкновения", нажимаем "по центру" либо изменяем по вашему желанию.

Затем добавляем спрайты движения влево/вправо/вверх/вниз (уже анимированные), желательно такой же ширины и высоты листа/холста (само изображение может быть и ниже, и Уже по размерам, но маска у всех должна быть одинаковая), чтобы не было застреваний в др. объектах.

Спрайты движения у меня сделаны на подобии игры soul knight, когда игрок там стоит.
Спрайты движения у меня сделаны на подобии игры soul knight, когда игрок там стоит.

2. Далее создаём объект игрока (как создать объект расписано в 3 уроке). Добавляем к нему первый спрайт - спрайт того, как стоит игрок. Ставим галочку на "Твёрдый".

Объект игрока
Объект игрока

Далее добавляем событие, нажав на кнопку "Добавить событие", событие называется "Клавиша нажата" и по вашему желанию выбираем управление стрелками или буквами и добавляем все 4 кнопки (влево/вправо и т.д.).

Это событие означает, что после нажатия на клавишу происходят действия, которые мы установим дальше (движение игрока).
Это событие означает, что после нажатия на клавишу происходят действия, которые мы установим дальше (движение игрока).

Дополнительная информация:

Создание - события происходящие при появлении объекта

Уничтожение - при удалении объекта

Будильник - это просто переменная, в которую можно добавить действия, которые произойдут после истечения заданного времени

Шаг - события при движении игрока (Делится на пункты: при начале движения, во время движения или когда движение закончено)

Столкновение - при столкновении с выбранным объектом

Клавиатура - когда удерживается клавиша

Мышь - когда удерживается или нажата клавиша

Другое - иные полезные функции

Рисование - если честно не пользовался, но думаю можно почитать на форумах

Клавиша нажата и отпущена - при нажатии или отпускании клавиш происходит действие

Триггер - какое-то пользовательское событие, которое можете создать вы сами, но думаю готовых функций нам хватит

Продолжим:

3. Добавляем все 4 события, затем открываем правую ячейку и перемещаем первое действие ("Move Fixed") в колонку "Действия" (перелистните картинку вправо).

"Move Fixed" - это действие, чтобы задать направление и скорость движения объекту.

(листайте вправо --->)

Затем выбираем скорость к объекту и направление (к событию нажатия левой кнопки выбираем направление влево, к событию нажатия правой - вправо и т.д.)

После этого у нас получится неостанавливаемый движущийся объект. Как его остановить? Легко - просто делаем 0 скорость и 0 направление при отпускании клавиш влево/вправо и т.д. . Так стоп, тогда это получится, что каждую смену направления персонаж будет останавливаться...

(листайте вправо --->)

Поэтому есть простое решение, выбираем событие удержание клавиши (то есть "Клавиатура") и выбираем "No Key" - то есть когда клавиши не нажаты. Правда тут тоже есть один очень маленький минус, но я ещё не придумал как его исправить, поэтому в дальнейшем, в будущих статьях я покажу как его исправить - это если вы одновременно будете держать кнопку управления и любую другую кнопку, а затем отпустите кнопку управления - персонаж будет двигаться дальше :)))

В одной из следующих статей я покажу управление, которое я считаю более менее идеальным из всех, которые я создавал.

А сейчас это не особо важно, пойдёт для первого раза и так.

Затем добавляем анимацию ходьбы к объекту. Выбираем из пункта Main1 действие "Change Sprite", выбираем спрайт соответствующий направлению движения и задаём скорость анимации.

"Change Sprite" - действие изменения спрайта на текущий, с определённой скоростью анимации.

(листайте вправо --->)

Анимацию/спрайт для события "No Key" мы ставим ту, где игрок стоит. Изначально при создании спрайта, для стоящего на месте персонажа, можно сделать анимированную или нет - по вашему желанию (можно анимировать глаза, как он моргает или немного шевелится - по вашему усмотрению).

(листайте вправо --->)

Также, если у вас всё-таки есть анимация на том спрайте, где персонаж стоит на месте, то нужно обязательно добавить событие "Create" и добавить действие смены спрайта. Это нужно лишь для того, если вы поставите на объект просто спрайт (чуть ниже названия объекта), то там нельзя настроить скорость анимации и она будет очень быстро сменяться (по моему там скорость анимации стоит стандартная, а-ля единица).

4. Теперь создаём комнату. Настраиваем кому как удобно, размер комнаты и скорость, но я предпочитаю ставить 60fps, а не 30, но это больше пригодится, если вы делаете сверх анимированные объекты у которых 30+ кадров.

Добавляем объект игрока
Добавляем объект игрока

Добавляем нашего игрока, через вкладку Объекты.

5. Запускаем и тестируем

Можно запускать игру
Можно запускать игру

Можно запустить нажав на зелёную кнопку, а можно на красную. Зелёная - обычный запуск, а красная - с режимом отладки, там можно не перезаходить и перезапустить игру сразу, если что-то пошло не так или если вы что-то тестируете. Также там можно ставить игру на паузу. (+ через него можно смотреть не проседает ли fps).

Запуск с режимом отладки
Запуск с режимом отладки
Проверка работоспособности
Проверка работоспособности

Всё работает, но при остановке человечек всегда смотрит вниз. Эту проблему мы решим уже в следующем уроке.

6. Теперь давайте создадим твёрдый блок. Делаем спрайт и добавляем его к объекту. Ставим галочку со свойством "Твёрдый".

Блок
Блок

Теперь открываем объект игрока, добавляем событие "Столкновение" и выбираем объект блок.

Событие столкновения с блоком
Событие столкновения с блоком

Добавляем действие движения и ставим нулевое направление и скорость.

При столкновении скорость игрока равна нулю
При столкновении скорость игрока равна нулю

Теперь расставляем препятствия в игру и запускаем.

Столкновение работает
Столкновение работает

Игрок может выходить за пределы комнаты? Это легко решается, но об этом уже в следующей статье.

Предыдущий урок (урок №3)

Следующий урок (урок №5) (скоро выйдет!)

Если что-то не понятно, можете спрашивать в комментариях, я обязательно отвечу и сделаю об этом отдельный пост.

Спасибо, что дочитали статью до конца!