Не волнуйтесь, начиная с Урока №5 качество статей улучшилось! Вместо скриншотов, появились гифки, теперь уроки стали нагляднее. Приятного просмотра!
В прошлых уроках мы научились пользоваться программой Game Maker.
В этом уроке мы создадим небольшую игру, чтобы понять основной принцип работы и разберемся с трудностями, которые могут возникнуть при создании.
1. Итак, для начала создаём спрайт игрока, когда он стоит. Как его создавать, можете посмотреть в первом и во втором уроках.
Это спрайт нашего будущего игрока. По стандарту нажимаем на кнопку "По центру", чтобы в будущем на заданных координатах объект становился центром на это место. По желанию точку можно поставить посередине снизу или в любом другом месте.
Дополнительная информация:
Маска объекта, а точнее маска спрайта. Маска простыми словами - это контур нашего спрайта, который сталкиваясь с "твердыми" объектами (у которых включен параметр твердости) не даёт проходить сквозь себя. Кратко говоря - это контур столкновения.
Показать столкновение - выделить спрайт тёмным цветом где наложена маска.
Маску можно сделать по форме "Точную", "Прямоугольную", в форме "Диска" или "Алмаза".
Также есть в рамочке "Главный" шкала "Альфа Толерант.". С этой шкалой можете сами поэкспериментировать, например при форме "Точная" маска будет не прямоугольная, а по краю рисунка. Если есть на спрайте прозрачные детали, то маска будет как-то ещё изменяться. (Примечание: эта шкала меняет маску только при форме "Точная")
Сепаратор масок - он нужен для того, чтобы для каждого кадра отдельно вычислялась маска столкновений (если в спрайте есть анимация). Но я не советовал бы включать его, т.к. могут появится большие проблемы с залипанием и застреванием игрока в стенах, объектах и тд.
Если включить "Сепаратор столкновения" и если у нас анимированный спрайт, то при каждой смене кадра, маска будет подстраиваться под контур изображения кадра. (Я сам не проверял, но судя по форумам это так)
Рамочка "Рамка". Автоматическое - маска объекта накладывается по максимальному размеру нарисованного изображения. Полное - если вокруг есть пустое пространство без пикселей, то маска захватит и его. Пример - введите свои значения в окошки, чтобы ограничить маску с краёв.
Итак, по стандарту поставим форму "Прямоугольник", шкалу не трогаем, сепаратор без разницы (т.к. стоит "Прямоуг-к", а не "Точный"), Ставим галочку на "Точная проверка столкновения", нажимаем "по центру" либо изменяем по вашему желанию.
Затем добавляем спрайты движения влево/вправо/вверх/вниз (уже анимированные), желательно такой же ширины и высоты листа/холста (само изображение может быть и ниже, и Уже по размерам, но маска у всех должна быть одинаковая), чтобы не было застреваний в др. объектах.
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) (скоро выйдет!)