Я новичок в разработке игр 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
, просто подключитесь к сигналу 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
@ Moon117 Если мой ответ помог вам лучше понять
signals
, рассмотрите возможность его принятия.