Найти тему
Игровой движок Godot engine

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

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

Сразу предупреждение ))
Всё что вы прочитаете ниже, имеет довольно отдаленное отношение к правильной реализации.

По уму , всё это нужно было пересобрать, поправить скрипты…
Но, мы же тут все ради развития, а не копипасты. Так что приступим.

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

-2

Закидываем это всё в сцену в таком порядке.

-3

sprite — земля
Т1 — танк
Т2 — тень танка
Т1 — башня
Т2 — тень башни
exp — спрайт вспышки

Разбираться с тенью будем на примере башни. Выключим все остальные слои, чтобы не мешались.
Первая проблема в такой иерархии — тень лежит НАД башней.

-4

Исправляем это недоразумение через Visibility > Show Behind Parent.

-5

Теперь всё супер.

Попробуем покрутить башню , и видим вторую, более весомую проблему: Тень прикреплена жестко к башне.
Что собственно логично — ребенок тянет все трансформации от родителя.

-6

Ну а нам надо чтобы тень вращалась вокруг своей оси (а не родителя) и была где-то в произвольной точке относительно башни.

На ум сразу приходят наши любимые косинусы. Берем синус и косинус угла башни и подаем на позицию тени!

Чтобы не месить месиво, выведем обе координаты в отдельные переменные.

-7

Проверяем.

-8

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

-9
-10

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

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

Ну и не забываем сменить режим наложения на Add. Чтобы наша вспышка как бы освещала всё под собой.

По итогу, скрипты выглядят вот так :

скрипт на рутовой ноде main_scene
скрипт на рутовой ноде main_scene
скрипт на ноде tank
скрипт на ноде tank

Ну и еще раз результат текущей итерации:

-13