Выступают ли сигналы Godot как обработчики событий?

Я новичок в разработке игр Godot. У меня возникли некоторые трудности с пониманием того, что такое сигнал в Godot. Я просмотрел официальную документацию, но не мог понять. Однако у меня возникает ощущение, что эти сигналы являются своего рода обработчиком событий.

Пожалуйста, помогите мне понять, что такое сигнал в godot и правильно ли я понимаю сигналы как обработчики событий?

Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
3
0
455
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы правы, 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, рассмотрите возможность его принятия.

Dayan 03.06.2019 14:21

Другие вопросы по теме