GODOT 3.3.X
Einleitung
Mit diesem Befehl können wir Zustände bestimmter Variablen vergleichen, bevor etwas ausgeführt werden soll, bzw. wie etwas ausgeführt werden soll. So können wir zum Beispiel überprüfen, ob das Leben des Spielers unter 0 gefallen ist, oder ob ein Fenster sichtbar ist oder nicht und dem entsprechend dieses öffnen oder schließen.
WENN "Spieler-Leben" kleiner als 0
--> game_over()
WENN "Fenster-Sichtbar" ist wahr
--> Fenster.schließen()
SONST WENN "Fenster-Sichtbar" ist falsch
--> Fenster.öffnen()
Die IF-Anweisung kann zudem mehrere Zustände gleichzeitig vergleichen, z.B. wenn wir eine Funktion bauen wollen, bei der beide Bedingungen erfüllt sein müssen oder nur eine von beiden.
WENN "Spieler-Leben" UND "Herzen" kleiner/gleich 0
--> to_high_score()
WENN "Kamerazoom" kleiner als "max_zoom"
ODER "Kamerazoom" größer als "min_zoom"
--> set_camera_zoom()
Code
Wichtig beim schreiben der IF-Anweisung ist, dass wenn wir eine Bedingung schreiben, diese mit einem Doppelpunkt endet und der auszuführende Code beim eintreffen der Bedingung eingerückt ist.
if player_health <= 0:
game_over()
else:
pass
Man sollte in diesem Beispiel den ELSE-Block auslassen (da dieser in diesem Fall so oder so nichts bewirkt). ELSE sollte man nur einsetzen, wenn wir wissen, dass wir auf einen undefinierten Bereich außerhalb unserer IF und ELIF-Blöcke stoßen könnten
╔════════════════════════════╗
if $Window.visible == false:
$Window.popup()
elif $Window.visible == true:
$Window.hide()
╚════════════════════════════╝
Wieso schreiben wir nach der ersten IF-Anweisung eine ELIF-Anweisung? [IF -> ELIF -> ELSE] werden als ein Block gesehen, d.h. wenn eine der Anweisungen zutreffen, wird der Rest übersprungen und der Code geht dann weiter nach dem letzten ELIF oder ELSE.
╔════════════════════════════╗
if $Window.visible == false:
$Window.popup()
╚════════════════════════════╝
╔════════════════════════════╗
if $Window.visible == true:
$Window.hide()
╚════════════════════════════╝
Ausgangspunkt – Fenster ist geschlossen:
Erste IF-Anweisung bestätigt, dass das Fenster geschlossen ist und führt den Code aus um das Fenster zu öffnen. Nach diesem IF kommt kein ELIF oder ELSE – das heißt der IF-Block ist komplett und der Code geht weiter. Die zweite IF-Anweisung sieht, dass das Fenster offen ist und schließt dementsprechend wieder das Fenster.
Das Problem ist, dass wir beim Testen des Codes das Fenster nicht mal für eine µSek. sehen würden. Das Fenster öffnet einfach nicht und wir wissen nicht wieso.
╔══════════════════════════════════════════╗
var id = power_up_item.id
if id >= 0 and id <= 2:
print("Player got Power-Up: " + str(id)
else:
print("ERROR: Couldn't load Power-Up!")
╚══════════════════════════════════════════╝
Hier haben wir eine Funktion welche, wenn der Spieler ein Power-Up aufsammelt, das entsprechende Icon lädt – um dieses dann z.B. auf dem Bidlschirm anzuzeigen. Die Power-Ups beinhalten eine ID, welche wir auslesen können. Mit der ID können wir dann definieren was mit dem Spieler passiert wenn er es aufsammelt (+Leben, +Herz, Schild, etc.)
Für unser Beispiel wollen wir, dass dem Spieler auf dem Bidlschirm angezeigt wird, welches Power-Up er gerade aufgesammelt hat und verwenden die ID um das jeweilige Icon aufzusammeln. Nun haben wir 3 mögliche Power-Ups zur Auswahl, haben diese im ersten IF-Block definiert (0 bis 2), welcher dann das entsprechende Icon lädt.
Nun haben wir auch noch einen ELSE-Block der den ganzen nicht definierten Bereich abdeckt, sollte, warum auch immer, eine nicht Vorhandene ID geladen werden, welche uns eine Fehlermeldung ausgibt!