Godot 信号是否充当事件处理程序?
Do Godot signals act as event handlers?
我是 Godot 游戏开发的初学者。我在理解 Godot 中的信号是什么时遇到了一些困难。我看过官方文档,但无法很好地理解。但是,我感觉这些信号是某种事件处理程序。
请帮助我理解 godot 中的信号是什么,以及我对信号作为事件处理程序的理解是否正确?
你说得对,signal
是一个可以从 Node
发出的事件。
emit_signal("signalName") #emit's signal with no data
emit_signal("signalName", whateverDataToSend) #emit's signal with data
然后您可以注册以在信号被触发时接收通知,因此 connect
到信号。
nodeWithSignalInIt.connect( String signalName, Object target, String methodToCall)
注意:connect
需要从内部有信号的节点调用
还值得注意的是,我们在 Godot 中使用的所有节点都可以找到信号,例如,如果您想收到 Area2D
上的碰撞条目的通知,那么只需连接到 Area2D 的 area_entered
信号。
示例:
func _ready() -> void:
#NOTE: InteractiveArea is of type Area2D
$InteractiveArea.connect("mouse_entered", self, "_on_mouse_entered")
$InteractiveArea.connect("mouse_exited", self, "_on_mouse_exited")
$InteractiveArea.connect("area_entered", self, "_on_player_entered")
$InteractiveArea.connect("area_exited", self, "_on_player_exited")
func _on_mouse_entered() -> void:
mouse_entered = true
func _on_mouse_exited() -> void:
mouse_entered = false
func _on_player_entered(area: Area2D) -> void:
print ("Player entered chest opening zone.")
interaction_zone = true;
func _on_player_exited(area: Area2D) -> void:
print ("Player exited chest opening zone.")
interaction_zone = false
我是 Godot 游戏开发的初学者。我在理解 Godot 中的信号是什么时遇到了一些困难。我看过官方文档,但无法很好地理解。但是,我感觉这些信号是某种事件处理程序。
请帮助我理解 godot 中的信号是什么,以及我对信号作为事件处理程序的理解是否正确?
你说得对,signal
是一个可以从 Node
发出的事件。
emit_signal("signalName") #emit's signal with no data
emit_signal("signalName", whateverDataToSend) #emit's signal with data
然后您可以注册以在信号被触发时接收通知,因此 connect
到信号。
nodeWithSignalInIt.connect( String signalName, Object target, String methodToCall)
注意:connect
需要从内部有信号的节点调用
还值得注意的是,我们在 Godot 中使用的所有节点都可以找到信号,例如,如果您想收到 Area2D
上的碰撞条目的通知,那么只需连接到 Area2D 的 area_entered
信号。
示例:
func _ready() -> void:
#NOTE: InteractiveArea is of type Area2D
$InteractiveArea.connect("mouse_entered", self, "_on_mouse_entered")
$InteractiveArea.connect("mouse_exited", self, "_on_mouse_exited")
$InteractiveArea.connect("area_entered", self, "_on_player_entered")
$InteractiveArea.connect("area_exited", self, "_on_player_exited")
func _on_mouse_entered() -> void:
mouse_entered = true
func _on_mouse_exited() -> void:
mouse_entered = false
func _on_player_entered(area: Area2D) -> void:
print ("Player entered chest opening zone.")
interaction_zone = true;
func _on_player_exited(area: Area2D) -> void:
print ("Player exited chest opening zone.")
interaction_zone = false