Найти тему
1,8K подписчиков

№101. Практика. Управление танком в игре с видом сверху. Часть №2.

636 прочитали

Продолжаем развивать нашу сценку. В этой статье будем добавлять стрельбу из танка.
Если вы пропустили первую часть , то она
лежит вот тут.
Для этого потребуется снаряд (у нас две пушки , так что будет двойной снаряд !) и эффект взрыва.

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

Для начала займемся взрывом.
Добавляем в проект ноду
AnimatedSprite, переименуем её сразу в «fire» и добавим неё наш спрайтщит взрыва.

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

Сразу сделаем несколько правок:

1) Переименуем анимацию в «fire»
2) Добавим в конце пустой кадр.
3) Изменим частоту кадров на 25.
4) Снимем галочку с LOOP, для чтого чтобы наша анимация не игралась постоянно.

В итоге сцена должна выглядеть вот так:

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

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

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

Выстрел работает. Но можно заметить что он не привязан к пушке.
Этим и заимемся дальше.

И тут у нас есть несколько вариантов. Наверное самый простой — это поставить ноду на пушке в том месте где надо показывать взрыв, и в коде привязать позиции взрыва к этой ноде…
Но давайте пойдем по немного иному пути.
Обойдемся без лишних нод и напишем всё через код :)
Установим позицию для взрыва равной глобальной позиции башни (ибо локальные равны нулю) + укажем отступ, для того чтобы взрыв появлялся не на самой башне , а на краю пушек.
Так как башня вращается отдельно от танка, то нужно указать это при расчете поворота)

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

Проверяем:

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

Неплохо!

Пришло время заняться вылетом снарядов.

Так как в один момент на экране может быть несколько снарядов, то будем делать снаряд инстансом.

Для этого создаем новую 2D сцену на основе KinematicBody2D, и сразу именуем её «bullet».
Дропаем наш спрайт снарядов, и добавлям
collisionShape2D.

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

Добавляем скрипт на родительскую ноду. Прописываем в него переменную которая будет указывать угол для полета снаряда — tank_angle.
Добавляем функцию которая будет устанавливать этот угол и поворачивать снаряд в сторону полета.
Ну и наш любимый move_and_slide() который будет всё это дело двигать.

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

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

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

Если мы сеичас запустим сцену , то увидим что всё работает неплохо, но заметно как пули толкают танк.

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

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

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

Осталось дописать всего одну функцию — удаление снаряда при выходе за пределы экрана.
Заходим в скрипт снаряда, добавляем ноду
VisibilityNotifier2D, и снимаем с неё сигнал screen_exited().

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

И наконец наш финальный результат :

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

Надеюсь вам был полезен этот материал.
Подписывайтесь на канал, и
вступайте в группу в ВК и не забывайте про дискорд сервер.