Функции GDScript не являются объектами, как в Python. Таким образом, вы не можете напрямую ссылаться на функцию.
Однако вы можете косвенно ссылаться на них по имени, используя их связанный экземпляр.
Например, со следующей функцией:
func hello():
print('Hello')
Вы можете вызвать функцию в экземпляре по имени:
call('hello') # prints 'Hello'
Вы можете сохранить экземпляр и имя с помощью funcref()
:
var ref = funcref(hello_object_instance, 'hello')
ref.call_func() # prints 'Hello'
takes_func_ref_to_call_later(ref) # later, prints 'Hello'
FuncRef.call_func()
делает то же самое, что и object_instance.call()
, просто оборачивает его в объект.
Из-за этого общая схема, как показано Object.connect()
и друзьями, для функций обратного вызова такова:
func deferred_finish(param1, param2, callback_obj, callback_func):
# ... do something
callback_ref = funcref(callback_obj, callback_func)
func _process(delta):
if _finished:
callback_ref.call_func()
func _enter_tree():
deferred_finish('hello', 'world', self, 'finished_callback')
Надеюсь, это поможет. Дайте мне знать, если вам нужны какие-либо разъяснения.