Lum*_*ria 6 scripting function gdscript godot
我对GDScript 语言的 Godot Docs 的一部分感到困惑。在页面中间的“引用函数”部分,它说您不能将函数存储在变量中,然后似乎立即自相矛盾。
Godot 函数可以存储在变量中吗?
引用函数
与 Python 不同,函数不是 GDScript 中的第一类对象。这意味着它们不能存储在变量中,不能作为参数传递给另一个函数或从其他函数返回。这是出于性能原因。
要在运行时按名称引用函数(例如,将其存储在变量中,或将其作为参数传递给另一个函数),必须使用 call 或 funcref 助手:
hol*_*ola 11
GDScript 函数不像在 Python 中那样是对象。因此,您不能直接引用函数。
但是,您可以使用它们关联的实例通过名称间接引用它们。
例如使用以下函数:
func hello():
print('Hello')
Run Code Online (Sandbox Code Playgroud)
您可以按名称调用实例上的函数:
call('hello') # prints 'Hello'
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令存储实例和函数名称funcref()
:
var ref = funcref(hello_object_instance, 'hello')
ref.call_func() # prints 'Hello'
takes_func_ref_to_call_later(ref) # later, prints 'Hello'
Run Code Online (Sandbox Code Playgroud)
FuncRef.call_func()
做同样的事情,因为Object.call()
它只是将它包装在一个对象中。
因此,回调函数的常见模式,如Object.connect()
和friends所示,是:
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')
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助。如果您需要任何说明,请告诉我。