Funktionen

Einleitung

Funktionen helfen uns den Code ordentlich zu halten. Zudem können wir, sich wiederholende Abläufe (z.B. abspeichern einer Datei), einmal programmieren und danach diese Funktion von überall abrufen, wenn wir diese benötigen!

Funktionen können auch abgerufen werden, wenn bestimmte Ereignisse geschehen. Jedes von uns generierte Script (welche wir an Szenen anhängen) hat schon vorgefertigte Funktionen, wie „_ready()“, „_process()“ und „_physics_process()“ um die wichtigeren zu nennen. Zudem können wir Ereignisse selber definieren, z.B. wenn ein Knopf gedrückt wird, die Funktion „_Knopf_gedrückt()“ abgespielt wird.

Code

Der Aufbau einer Funktion kann verschieden ausfallen, je nachdem was die Funktion machen soll. Wir können Funktionen Daten geben, welche diese verarbeitet und diese dann das Ergebnis ausgibt. Wir können aber auch eine Funktion haben die nichts verarbeitet und auch nichts zurück gibt, sondern als Beispiel die Taschenlampe des Spielers an/aus macht.

# "func" sagt der Engine, dass wir jetzt eine Funktion definieren wollen
# Danach kommt der Funktionsname mit Klammern abgeschlossen von einem Doppelpunkt

func switch_light():

   # Hier definieren wir jetzt unsere Funktion was sie machen soll
   # Das Ausrufe-Zeichen sagt, dass wir das Gegenteil vom jetzigen Stand haben wollen!
   $Light.visible = !$Light.visible

Das ist der grundlegende Aufbau einer Funktion. Sie verarbeitet keine externen Daten und führt local, d.h. in der Szene wo sich das Script befindet, eine Operation durch. In diesem Fall das Gegenteil der Sichtbarkeit des Lichtes nehmen und es auf das Licht anwenden –> Licht geht an oder aus!

# Jetzt wollen wir beim aufrufen der Funktion selber bestimmen ob das Licht an/aus geht
# Dazu schreiben wir eine VAR in die Klammer und definieren ihren Typ

func switch_light(set: bool):

   # Jetzt haben wir die VAR "set" des Typs boolean (true/false) in der
   # Funktion vorhanden. Beim aufrufen der Funktion muss dieser definiert werden!
   $Light.visible = set

# Folgende Funktion "_ready()" wird automatisch ausgeführt, wenn die Szene/Objekt geladen wird

func _ready():

   # Wir führen jetzt die "switch_light()"-Funktion aus um sicherzustellen, dass
   # wenn das Spiel startet die Taschenlampe aus ist
   switch_light(false)

   # Mit "false" stellen wir die VAR "set" in der Funktion "switch_light(set: bool)
   # ein, welche dann "$Light.visible = false" ausführt!

Jetzt ist es außerdem möglich den Variablen in Funktionen, Standart-Werte einzustellen. Wichtig ist, dass wenn wir eine Mischung aus Variablen mit Standart-Werten und ohne haben, die Variablen ohne Wert Definiation am Anfang stehen!

# set bleibt ohne Standart-Definition, die neue Variable color wird eine Standart-Definition haben
# Color(1, 1, 1) besagt, dass die Farb-Werte Rot, Grün, Blau (RGB) alles auf 100%  eingestellt sind
# Wir erhalten somit die Farbe Weis

func switch_light(set: bool, color: Color = Color(1, 1, 1)):

   # Licht an/aus
   $Light.visible = set

   # Einstellung der Lichtfarbe
   $Light.modulate = color

# set muss jetzt wieder definiert werden beim Ausführen des Scripts
# color hingegen muss nicht definiert werden

func _ready():

   # Option 1: ohne color Definition --> Weises Licht
   switch_light(true)

   # Option 2: mit color = Color(1, 0, 0) --> R = 100%, G und B = 0% --> Rotes Licht
   switch_light(true, Color(1, 0, 0))

Nun können wir auch Funktionen erstellen die uns einen Wert zurückgeben. Als sehr simples Beispiel erstellen wir eine Funktion die die Variable a mit b addiert und uns das Ergebnis zurück schickt.

# Die VARs a und b definieren wir als Integer und unser Wert den wir
# ausgeben ist schlussfolgend auch ein Integer (definiert durch -> int am Schluss)
# Die Rückgabe Definition (Typ) ist nicht von nöten, Hilft uns aber Fehler zu vermeiden
# Genauso ist die Typen Definition der VARs nicht von nöten, hilft aber genauso Fehler
# zu vermeiden, wie z.B. dass wir keinen Text mit einer Zahl addieren ("abc" + 7)

func add_numbers(a: int, b: int) -> int:

   # Addiert VAR a mit b und gibt es gleich zurück
   return a + b

# "return" muss vorhanden sein, da wir zuvor "-> int" definiert haben!

func _ready():

   # Der Wert wird in der gleichen Zeile zurückgegeben!
   # Option 1: Das Ergebnis an eine neue VAR zurückgeben
   var ergebnis: int = add_numbers(3, 4)

   # Option 2: Das Ergebnis direkt verwenden, z.B. in die Konsole schreiben
   print(add_numbers(3, 4))
Functions (29 Downloads)