问题描述
signal_test.gd
extends Node2D
signal do
func _ready() -> void:
print('signal_ready!')
emit_signal('do')
pass
test.gd
extends Node2D
onready var signal_test = preload('res://signal_test.tscn')
func _ready() -> void:
print('test ready')
func _process(delta: float) -> void:
if Input.is_action_just_pressed("jump"):
var h = signal_test.instance()
add_child(h)
h.connect('do',self,'do')
print(h.is_connected('do','do'))
func do():
print('DONE CONNECTING!!')
test.gd 文件创建一个节点实例,并使用 connect()
方法将其连接到它的函数。但是该函数没有被执行。当我在 test.tscn 上使用 true
时它只说 is_connected()
,但在节点实例上使用 false
。有人知道为什么吗?
解决方法
信号将在 _ready
中发出,该信号将在将节点添加为子节点后,在下一行之前执行:
var h = signal_test.instance()
add_child(h)
# <-- signal emitted here,it is NOT connected
h.connect('do',self,'do')
解决方法:在将节点添加为子节点之前先连接信号:
var h = signal_test.instance()
h.connect('do','do')
add_child(h)
# <-- signal emitted here,it is connected