Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Anwendung objektorientierter Prinzipien in Godot

Die Engine bietet im Wesentlichen zwei Wege zum Erstellen wiederverwendbarer Objekte: Skripte und Szenen. Streng genommen werden keine von beiden intern durch Klassen dargestellt.

Bei vielen bewährten Praktiken in Godot werden jedoch objektorientierte Programmierprinzipien auf die Skripte und Szenen angewendet, aus denen Ihr Spiel besteht. Deshalb ist es nützlich, zu verstehen, wie wir sie als Klassen betrachten können.

In dieser Anleitung wird kurz erläutert, wie Skripte und Szenen im Kern der Engine funktionieren, damit Sie ein besseres Verständnis für ihre interne Funktionsweise erhalten.

Wie Skripte in der Engine funktionieren

Die Engine bietet Built-in-Klassen wie Node. Sie können diese erweitern (englisch: extend), um mithilfe eines Skripts abgeleitete Typen zu erstellen.

Diese Skripte sind technisch gesehen keine Klassen. Stattdessen handelt es sich um Ressourcen, die der Engine eine Folge von Initialisierungen mitteilen, die dann auf einer der Built-in-Klassen ausgeführt werden sollen.

Die internen Klassen von Godot verfügen über Methoden, um die Daten einer Klasse in einer ClassDB zu registrieren. Diese Datenbank bietet zur Laufzeit Zugriff auf Klasseninformationen. ClassDB enthält Informationen über Klassen, wie:

  • Propertys.

  • Methoden.

  • Konstanten.

  • Signale.

In dieser ClassDB schauen Objekte nach, wenn sie eine Operation wie einen Zugriff auf eine Property oder den Aufruf einer Methode durchführen. Hier werden die Datensätze der Datenbank und die Datensätze der Basistypen des Objekts geprüft, um zu sehen, ob das Objekt die Operation unterstützt.

Das Anhängen eines Skripts an Ihr Objekt erweitert die Methoden, Propertys und Signale, die über die ClassDB zur Verfügung stehen.

Bemerkung

Auch Skripte, die das Schlüsselwort extends nicht verwenden, erben implizit von der Engine-Basisklasse RefCounted. Deshalb können Sie Skripte ohne das Schlüsselwort extends im Code instanziieren. Da sie jedoch RefCounted erweitern, können Sie sie nicht an einen Node anhängen.

Szenen

Das Verhalten von Szenen hat viele Ähnlichkeiten mit Klassen, so dass es sinnvoll sein kann, sich eine Szene als Klasse vorzustellen. Szenen sind wiederverwendbare, instanziierbare und vererbbare Gruppen von Nodes. Das Erzeugen einer Szene ist vergleichbar mit einem Skript, das Nodes erzeugt und sie mit add_child() als Child-Nodes hinzufügt.

Wir koppeln häufig eine Szene mit einem geskripteten Root-Node, der die Nodes der Szene verwendet. Somit erweitert das Skript die Szene, indem es neues Verhalten über imperativen Code hinzufügt.

Der Inhalt einer Szene hilft, zu definieren:

  • Welche Nodes für das Skript verfügbar sind.

  • Wie sie organisiert sind.

  • Wie sie initialisiert werden.

  • Welche Signalverbindungen sie miteinander haben.

Warum ist irgendetwas davon für die Organisation der Szene wichtig? Weil Instanzen von Szenen Objekte sind. Infolgedessen gelten viele objektorientierte Prinzipien, die für geschriebenen Code gelten, auch für Szenen: Single Responsibility, Kapselung und andere.

Die Szene ist immer eine Erweiterung des Skripts, das dem Root-Node angehängt ist, also können Sie sie als Teil einer Klasse ansehen.

Die meisten der Konzepte in dieser "bewährte Praktiken"-Artikelreihe bauen auf diesem Punkt auf.