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

№42. Разбираемся с call_deferred().

Штука, с которой вы наверняка столкнетесь при работе с годо.

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

Поехали!

В сцене рут и две ноды под ним. А1 и В1.
Из А1 эмитим сигнал, после выполнения фор лупа. В В1 его ловим.

скрипт на ноде А1
скрипт на ноде А1
скрипт на ноде В1
скрипт на ноде В1

По идее , после запуска приложения мы должны увидеть цифры от 0 до 4-х, и текст «SUCCESS»
Запустим приложение:

-4

…видим, что наш сигнал либо не запустился, либо потерялся.
Хотя в коде на первый взгляд все в порядке…

А дело тут вот в чем :
А1 запускает функцию, в которой начинается фор луп, одномоментно В1 пытается поимать сигнал который идет после фор лупа. Так как оба запускаются из
_ready(), то В1 просто не получает сигнала.

И именно для таких случаев нужен метод call_deferred(). Он позволяет дождаться пока выполнится тик, и после чего стартануть исполнение функции.

Чуть подредактируем скрипт А1 .

-5

И посмотрим на результат:

-6

И пару слов еще про то как сделать deferred() функцию через меню.

-7

Нажимаем на переключатель Advanced

-8

И ставим галочку возле Deferred
После этого можно подвести курсор в инспекторе к функции и увидеть что справа есть приписка deferred

-9

На этом всё. По традиции — удачи в изучении годо !