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

№9. Сигналы-2. Расширяем знания.

Помимо прямого создания нод через меню и прямого подключения сигналов, мы можем всё это делать через код. Для подключения сигнала в скрипте существует метод connect().
На примере кнопки (button) подключение сигнала «button_down» будет выглядеть следующим образом:
$Button.connect("button_down", self, "_click") Что тут происходит.
Мы берем кнопку, и подключаем сигнал «button_down» к самому себе (self), и выводим отработку сигнала в функцию «_click» Во время написания кода , годо предложит вам весь список сигналов, так что не обязательно знать написание каждого из сигналов. Ну а далее нам остается только описать функцию «_click». В моем случае я просто вывел в вывод текст «CLICKED» Мы так же можем выводить в коннекте кастомные аттрибуты. Например какое то число или текст. Либо передать собственное имя. Помимо этого в годо есть возможность создавать свои сигналы.
Создадим следующую сцену : В скрипте кнопки мы будем создавать наш кастомный сигнал. А в скрипте подключенном к ноде room_03 буд

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

Для подключения сигнала в скрипте существует метод connect().
На примере кнопки (button) подключение сигнала «button_down» будет выглядеть следующим образом:
$Button.connect("button_down", self, "_click")

Что тут происходит.
Мы берем кнопку, и подключаем сигнал «
button_down» к самому себе (self), и выводим отработку сигнала в функцию «_click»

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

Ну а далее нам остается только описать функцию «_click». В моем случае я просто вывел в вывод текст «CLICKED»

Мы так же можем выводить в коннекте кастомные аттрибуты. Например какое то число или текст.

по нажатию на кнопку в выводе будет «42»
по нажатию на кнопку в выводе будет «42»

Либо передать собственное имя.

по нажатию на кнопку в выводе будет «My_Button»
по нажатию на кнопку в выводе будет «My_Button»

Помимо этого в годо есть возможность создавать свои сигналы.
Создадим следующую сцену :

-4

В скрипте кнопки мы будем создавать наш кастомный сигнал. А в скрипте подключенном к ноде room_03 будем этот сигнал ловить.

Итак , что надо сделать для того, чтобы наш сигнал появился …
Для этого сначала необходимо его объявить :
signal custom_signal

Затем по клику на кнопку этот сигнал запустить:
emit_signal('custom_signal')

так выглядит скрипт на кнопке
так выглядит скрипт на кнопке

Теперь отловим этот сигнал из скрипта который подключен на ноду room_03.
Для этого в
_ready() просто подключим сигнал к кнопке.

так выглядит скрипт на ноде room_03
так выглядит скрипт на ноде room_03

Запускаем, нажимаем на кнопку и видим в выводе слово YES. А это значит что всё работает как и ожидалось.

Как и в случае с обычными сигналами, мы можем передать всё что угодно дополнительными параметрами. Например давайте передадим цифру «42», слово «QUESTION», и имя кнопки.

-7

И отловим это всё в room_03.

-8

В выводе получаем всё что и отправили в сигнале:

-9

******

Как некоторые могли заметить , в случаях выше мы подключали сигнал к self , т.е к самой ноде из которой сигнал и запускали, но годо позволяет подключить сигнал к другой ноде и выполнить функцию из неё.

Для примера создадим сцену :

-10

Из ноды child будем стартовать сигнал stat по нажатию кнопки, в котором передадим имя и возраст.

-11

В ноде basic_root подключим сигнал, но вместо self пропишем путь до ноды bar, в которой запустим функцию demo.

-12

Ну и теперь код из ноды bar. Функция demo принимает два аргумента — имя и возраст, которые мы отправили из ноды child.

-13

Запускаем приложение, жмем на кнопку мышки, и смотрим на результат.

-14

На этом пожалуй всё. Удачного изучения !