Jedes Node stellt eigene Signale bereit, welche im eigenen Skript aber auch in Skripten von anderen Nodes Funktionen aufrufen können. Wichtig an dieser Stelle, dass Skript muss bereits existieren.
Selektieren wir im Panel Szene ein Node, können wir im Panel Node unter Signale eine Liste eigener und geerbter Funktionen einsehen. Soll ein Skript auf eines dieser Signale reagieren, klicken wir die Funktion in diesem Panel an.
Im Dialogfenster werden links alle in der Szene verwendeten Nodes aufgeführt. Durch Auswahl eines dieser Nodes, können wir dessen Skript mit dem Signal verbinden.
Hat das selektierte Node ein Skript, wird unter der Zeile Method In Node: Der Hinweis „Funktion erstellen“ gegeben. Nur wenn dieser Hinweis erscheint, hat das Node ein Skript und der Vorgang kann erfolgreich abgeschlossen werden. Das Textfeld enthält einen Namensvorschlag für die Funktion welcher ins Skript eingebunden wird. Diesen können wir bei Bedarf anpassen.
Mit dem Button „Verbinden“ wird die Funktion im entsprechenden Skript eingefügt und im Skript-Editor angezeigt.
Im Panel Szene wird durch das Symbol angezeigt, dass dieser Node ein Signal aussendet. Im Panel Node-Signale wird die erzeugte Funktion nun mit aufgelistet.
Alternativ können wir diese Signalverbindung auch über ein Skript verknüpfen.
func _ready(): get_node("Button").connect("pressed", self, "_on_Button_pressed") func _on_Button_pressed(): get_node("Label").text = "Mein neuer Text"
Hier einmal ein sehr abstraktes Beispiel: Ein Sprite sendet eine Nachricht wenn die Taste B gedrückt wird.
extends Sprite var nachricht signal arlam(nachricht) func _process(delta): if Input.is_key_pressed(KEY_B): nachricht = "Taste B" emit_signal("arlam", nachricht)
Das Label wird mit diesem Signal verbunden und ruft im Signalfall die angegebene Funktion auf.
extends Label func _ready(): $"../Sprite".connect("arlam", self, "tastendruck") func tastendruck(nachricht): text = nachricht
In der Funktion wird der übergebene Parameter der Label-Eigenschaft „Text“ übergeben, wodurch der Label diesen Text nun anzeigt.
Bei Bedarf können auch mehrere Variablen übergeben werden. Wir müssen dann nur signal, emit_signal() und die aufzurufende Funktion entsprechend erweitern.
signal arlam(nachricht,id) ----- emit_signal("arlam", nachricht, id) ---- func tastendruck(xx,yy): text = xx print(yy)
Der entgegenzunehmende Parameter in der Funktion, muss nicht den gleichen Namen tragen, wie die zu übergebende Variable, welche im vorigen Skript definiert wurde. Jedoch innerhalb der Funktion muss sie dem Namen entsprechen, welchen wir im Funktionskopf verwenden.