Штука, с которой вы наверняка столкнетесь при работе с годо.
За основу я взял чужой материал, просто потому, что на этом примере очень просто понять как и что происходит.
Подразумевается, что вы уже более менее опытный пользователь. Понимаете как выполняются функции и что такое сигналы.
Поехали!
В сцене рут и две ноды под ним. А1 и В1.
Из А1 эмитим сигнал, после выполнения фор лупа. В В1 его ловим.
По идее , после запуска приложения мы должны увидеть цифры от 0 до 4-х, и текст «SUCCESS»
Запустим приложение:
…видим, что наш сигнал либо не запустился, либо потерялся.
Хотя в коде на первый взгляд все в порядке…
А дело тут вот в чем :
А1 запускает функцию, в которой начинается фор луп, одномоментно В1 пытается поимать сигнал который идет после фор лупа. Так как оба запускаются из _ready(), то В1 просто не получает сигнала.
И именно для таких случаев нужен метод call_deferred(). Он позволяет дождаться пока выполнится тик, и после чего стартануть исполнение функции.
Чуть подредактируем скрипт А1 .
И посмотрим на результат:
И пару слов еще про то как сделать deferred() функцию через меню.
Нажимаем на переключатель Advanced
И ставим галочку возле Deferred
После этого можно подвести курсор в инспекторе к функции и увидеть что справа есть приписка deferred
На этом всё. По традиции — удачи в изучении годо !