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

№160. GODOT 4.0. Практика. Создание нескольких кнопок через код, подключение сигналов.

В этой статье будем собирать вот такое круговое меню.

Будем делать всё через код, дабы прокачать скилы кодера :)

Т.З : Необходимо создать меню, в котором все кнопки располагаются по окружности, с возможностью менять количество кнопок.
Кнопки должны выводить некую информацию в центре меню. Спустя некоторое время информация удаляется.
При наведении курсора к кнопкам они плавно меняют свой размер.

Так как в будущем нам нужно будет обращаться в _Process() ко всем кнопкам, я сразу создал ноду под которую буду сваливать все кнопки и перебирать через get_child().
Вы можете в данном случае сделать как то иначе, через группу, или идентификатор.
Сразу же добавим в проект Label, который будет выводить инфу после нажатия на кнопки.

-2

Переходим в редактор кода. Начинаем накидывать.

Для начала обозначим переменную количества кнопок.
И в _ready() через цикл создадим 9 кнопок в ряд.
(коментарии к коду на картинке)

-3

Стартуем

-4

Всё рисуется, пришло время добавить логику для построения кнопок по окружности.
Надеюсь вы помните, что такое синус ))

Делим полный круг на количество кнопок и выносим это в переменную pip.
Далее подмешиваем это в значения позиций.

-5

Результат:

-6

Сразу поправим расположение кнопок.

-7
-8

Отлично. Проверим разное количество кнопок на отрисовке:

-9

Пришло время подключить логику которая будет менять размеры кнопок при приближении к ним курсора.
В _process() перебираем все наши кнопки и если дистанция между курсором и кнопкой меньше 100 пикселей - подмешиваем к scale дистанцию до курсора.

-10

Проверяем :

-11

Осталось подключить сигналы к кнопкам и выводить инфу в лейбл.
Для начала подключим просто сигнал
pressed, и выведем в консоль некий текст.

-12

По нажатию на любую кнопку в консоли будет выводиться текст Worked!.

Теперь подключим в сигнал передачу агрумента. В качестве последнего будет выступать номер кнопки.
Ну и в функции clickButt будем выводить это всё в леибл.

-13

И на последок добавляем очищения лейбла. Для этого добавим программный таймер через await.

-14

Ну и на этом всё. Проверяем, радуемся результату !

-15

За сим всё, удачной разработки !
Подписывайтесь на канал,
вступайте в группу в ВК, и не забывайте что у нас есть дискорд сервер.
Удачи в изучении годо !