Найти в Дзене
Игровой движок Godot engine

№65. Практика. Генерация рандомных сундуков с разными предметами.

Оглавление

В этой статье будем реализовывать следующее :
Сундук, с неким рандомным количеством содержимого. По клику содержимое вылетает , и вычитается из общего количества в сундуке.
Видов сундуков - три. В каждом свой вид содержимого.
Ну и самое важное — возможность дублирования сундуков с сохранением всей логики без дополнительных правок в коде.

Для примера будут разные цвета сундуков. Синий, золотой и зеленый. Содержимое — сердечки, кувшин, снадобье.

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

Сундук

-2

Основа — спрайт. Под ним ареа2Д с колижен шейпом. Последние для отлова клика.
Ну и лейбл для отображения количества содержимого

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

-3

Содержимое сундука.

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

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

Подвесим скрипт на спрайт, опишем массив текстур , и опишем поведение бонуса с момента появления. Т.е полет вверх и удаление.

-4

При запуске этой сцены вы должны увидеть как бонус летит вверх и исчезает.

Переменные:
s_res — массив текстур
life — как долго будет жить бонус в полете

Вернемся в сцену с сундуком, и начнем писать код для него.
Для начала опишем массив текстур для трех типов сундуков.
И добавим еще две переменные :
counter — отвечает за количество бонусов внутри(рандом от 1 до 5)
sp — рандомное число для определения сундука. (0 — синий, 1-золотой,2-зеленый)

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

В функции input по клику создаем инстанс сцены бонуса. И указываем номер сундука для того чтобы в инстансе загрузилась корректная текстура.
Это делаем через функцию
image_changer описанную в сцене бонуса.

-5

Теперь мы можем наклонировать несколько сундуков при помощи Ctrl+D, или через код . И увидим что у каждого сундука свои данные и всё работает как и планировалось.

-6
-7

Каждый раз при старте сцены у нас будут разные сундуки с разным количеством бонусов внутри.