Mehrfachvererbung und Interfaces

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
jammernich
Beiträge: 25
Registriert: Di 5. Nov 2024, 22:36
OS, Lazarus, FPC: Win11, Lazarus 3.8
CPU-Target: x86_64bit

Mehrfachvererbung und Interfaces

Beitrag von jammernich »

Hallo zusammen,

mit der klassischen Vererbung komme ich nicht weiter. Jetzt brauche ich sowas wie Mehrfache Vererbung. Das ist mit Object Pascal eigentlich nicht möglich habe ich gelesen. Wie bekomme ich das hin mit Interfaces ?

Hier mal beispielhaft woran ich arbeite: Ich habe zwei Klassen: TRPGGameObject und TSprite.

TRPGGameObject ist eine Basisklasse für z.B. Items und Charaktere.
TSprite übernimmt das Rendern von z.B. einem Icon das dazugehört.

Ich möchte gerne die zwei Klassen zusammenführen zu einer Art GameObject-Superklasse :?:

Bitte schreibt mir was ich mir durchlesen sollte oder was Euch beim verstehen geholfen hat.

jammernich
Beiträge: 25
Registriert: Di 5. Nov 2024, 22:36
OS, Lazarus, FPC: Win11, Lazarus 3.8
CPU-Target: x86_64bit

Re: Mehrfachvererbung und Interfaces

Beitrag von jammernich »

Hier ist schonmal eine Einführung
https://castle-engine.io/modern_pascal#_interfaces

PascalDragon
Beiträge: 945
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Mehrfachvererbung und Interfaces

Beitrag von PascalDragon »

jammernich hat geschrieben: Do 27. Feb 2025, 20:40 Ich möchte gerne die zwei Klassen zusammenführen zu einer Art GameObject-Superklasse :?:
Da es hier speziell um Games geht wäre es wahrscheinlich besser mit „Verhalten” zu arbeiten: Du hast eine GameObject Klasse, welche eine Liste von verschiedenen Verhalten Instanzen hat, wobei jedes unterschiedliche Verhalten eine abgeleitete Klasse von einer Basisklasse für Verhalten ist. Ein Verhalten kann zum Beispiel sein, dass das ein Item ist und dessen Eigenschaften, ein anderes Verhalten ist ein Charakter und dessen Eigenschaften und ein weiteres ist ein Verhalten für „hat ein Icon”.
Der Code, der sich nun um das jeweilige Verhalten kümmert, kann von allen Objekten die jeweilige Verhaltensinstanz abfragen und dann damit arbeiten.
Das macht den Code letztlich viel leichter erweiterbar. Castle Game Engine und viele andere Game Engines (wie Unity) nutzen dies ebenfalls. Die GameObject Klasse selbst, hat dann wirklich nur das nötigste, was allen GameObjects gemein ist.
Das Ganze ist auch bekannt als Entity Component System.
FPC Compiler Entwickler

jammernich
Beiträge: 25
Registriert: Di 5. Nov 2024, 22:36
OS, Lazarus, FPC: Win11, Lazarus 3.8
CPU-Target: x86_64bit

Re: Mehrfachvererbung und Interfaces

Beitrag von jammernich »

Hallo PascalDragon,

https://castle-engine.io/behaviors
danke das ist sehr interessant!

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Mehrfachvererbung und Interfaces

Beitrag von Warf »

Generell arbeiten Spiele Engines häufig mit Komposition. Zum Vergleich, bei Vererbung sagt man: Klasse 2 ist eine Art von Klasse 1. Bei Komposition sagt man: Klasse 2 enthält Klasse 1.

Wie das normalerweise dann gemacht wird, du hast seine Spielobjekte die alle auf eine Basisklasse zurück gehen, in Godot z.B. heißt das Teil Node Tree.
Diese Objekte enthalten dann weitere Objekte die dem dann Eigenschaften geben.
Als Beispiel in Godot ist meine Spielerfigur ein PhysicsBody2D und enthält eine AnimatedSprite2D um die Grafik anzuzeigen, einen CollissionShape2D um die Kollisionen in der Physik Engine zu erkennen und ein Assoziierten Verhaltensscript, was den Code implementiert und aus tasten Druck Bewegung zu machen.

Also statt das es ein Objekt ist das durch Vererbung mehrere Sachen gleichzeitig ist, ist's ein Container der mehrere Sachen enthält.
Das hat den Vorteil das diese Elemente einzeln austauschbar sind.
Z.b. hab ich in meinem Spiel den Effekt gehabt das der Spieler kurzzeitig Kontrolle über seine Figur verliert, gelöst war das ganz simpel indem das behavior script das den Nutzer Input nutzt um damit die Figur zu bewegen durch ein AI script (tatsächlich das selbe was ich für die Gegner benutze) temporär ausgetauscht hat.
Genauso kann ich einfach die Texturen oder die Kollisionsform austauschen falls ich das benötige

jammernich
Beiträge: 25
Registriert: Di 5. Nov 2024, 22:36
OS, Lazarus, FPC: Win11, Lazarus 3.8
CPU-Target: x86_64bit

Re: Mehrfachvererbung und Interfaces

Beitrag von jammernich »

Vielen Dank für die Anregungen und Erklärungen hier.

Antworten