Найти тему
Stronghold of gamedev

Создаем Angry Birds. Часть 2 : механики и уровни.

Оглавление
Использую всё
Использую всё

Продолжая первую часть статьи о создании реплики Angry Birds с попутным разъяснением всего подряд, настало время реализовывать самое сложное : механики. Ну и строить уровни, но здесь дело фантазии да и только.

Стрельба из рогатки

Самая важная и интересная часть игры очевидно. Я попробую без скучного занудства объяснить как же стреляет рогатка.

Кусок кода на эльфийском C#
Кусок кода на эльфийском C#

И так, что же тут написано?
Проверки и действия происходят каждый кадр.
Если нажата левая кнопка мыши, то :
Отслеживаем положение курсора мыши на экране, приобразуя экранные координаты в мировые (внутри игры непосредственно).
Вычисляем вектор смещения от изначальной позиции в рогатке.
Задаем новую позицию птичке, которая равна стартовой позиции + ограниченный до единицы вектор, не дающий птичке летать по всей карте за курсором, а оставляющий её в районе рогатки, как бы натягивая :

Натягивается на воздух из-за малого бюджета (0  тысяч долларов)
Натягивается на воздух из-за малого бюджета (0 тысяч долларов)

Второй кусок кода повествует о непосредственно катапультировании птички :

Вот так.
Вот так.

Тут написано :
Если левая кнопка мыши отпускается, то :
Вычисляем вектор дистанции между птичкой и стартовой позицией (его можно использовать для регулирования силы : натягиваем слабо - стреляет слабо и наоборот)
Активируем динамичный тип поведения твердого тела. Изначально он был кинематичным (воздействие только через скрипт), чтобы не падал вниз во время натяжения.
"Подталкиваем" его в направлении вектора, который равен = стартовая позиция в рогатке минус настоящее положение птички, умножаем на 700.
Эту цифру я взял в ходе экспериментов, протыкивая различные значения я пришел к приемлимой цифре в 700.

Баллистика в деле
Баллистика в деле

Свинья и капля интерфейса

Настало время научить эту свинью сдаваться, а нам предоставлять проход на следующие уровни в случае победы.

Интерфейс
Интерфейс

Я создал две кнопки, задачу которых вы уже поняли, какой у нас уровень и конечно название своего канала с лого Дзена :)

Кнопки будут высвечиваться в случае устранения свиньи.

Кусок кода №1
Кусок кода №1

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

Кусок кода №2
Кусок кода №2

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

Пробуем :

Попытка№1
Попытка№1
Попытка№2
Попытка№2

Справедливости ради я задействую в одном из следующих уровней каменный блок и валун. Если у досок масса 1, то камню я задал массу 15, чтобы он обладал внушительной останавливающей силой :

В лоб не получится
В лоб не получится

Очевидно это заставляет игрока искать более хитрые решения :

Как сложно!
Как сложно!

На создание этой поделки я потратил 4 часа. Как видите достаточно простые идеи сейчас так же просто реализовать благодаря встроенным инструментам движка и горстке знаний.

Часть 1 : ресурсы и физика.

Если вы хотите еще больше практического материала по геймдеву, подписывайтесь на канал и оценивайте статьи!



Angry Birds
805 интересуются