Вы правы, 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
, тогда просто подключитесь к этому сигналу area_entered
Area2D.
Пример:
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