Ich bin gerade dabei, ein neues 2D-Spiel aus einem Code zu erstellen, den ich vor einiger Zeit geschrieben habe.
Die Objekthierarchie für Entitäten lautet wie folgt:
Scene
(zBMainMenu
): Enthält mehrere Entitäten und Delegierteupdate()
/draw()
an jedeEntity
: Basisklasse für alle Dinge in einer Szene (zBMenuItem
oderAlien
)Sprite
: Basisklasse für alle Entitäten, die nur eine Textur zeichnen, dh keine eigene Zeichenlogik haben
Ist es sinnvoll, Entitäten und Sprites so aufzuteilen? Ich denke in einem 2D-Spiel sind die Begriffe Entität und Sprite etwas synonym, oder?
Ich glaube jedoch, dass ich eine Basisklasse für Entitäten benötige, die nur eine Textur zeichnen, anstatt sich selbst zu zeichnen, um Doppelarbeit zu vermeiden. Die meisten Entitäten sind so.
Ein seltsamer Fall ist meine Text
Klasse: Sie leitet sich von ab Sprite
, die entweder den Pfad eines Bildes oder eine bereits geladene Textur in ihrem Konstruktor akzeptiert. Text
Lädt eine Textur in seinen Konstruktor und übergibt diese an Sprite
.
Können Sie ein Design skizzieren, das sinnvoller ist? Oder weisen Sie mich auf eine gute objektorientierte Referenzcodebasis für ein 2D-Spiel hin? Ich konnte nur 3D-Engine-Codebasen mit anständiger Codequalität finden, z. B. Doom 3 und HPL1Engine.
Entity
aktivieren, aber die Szene erhält keinen Zugriff auf dieDrawable
. Steuert auchEntity
weiterhin, wie es angezeigt wird, da es ein geeignetes auswähltDrawable
. Es macht einfach nicht mehr die Details. Können Sie mir ein kurzes Beispiel für das System geben, an das Sie denken, oder mich auf eine Codebasis verweisen, die es verwendet?Im Allgemeinen sollten Sie die Komposition nach Möglichkeit der Vererbung vorziehen. In diesem Beispiel hätte ich Sprite nicht als Basisklasse, von der Spielobjekte abgeleitet sind. Ob ein Sprite gezeichnet werden soll oder nicht, ist nur eine Eigenschaft des Entity-Objekts. Möglicherweise folgen Sprite und Text einer Drawable-Oberfläche und ordnen sie entsprechend den Entitäten zu.
quelle
Drawable
Schnittstelle nach Komposition verwendet? Wenn dies der Fall ist - wie könnte die Szene die Entitäten sichdraw()
selbst mitteilen, wenn sie sich nicht in ihrer Benutzeroberfläche befinden? Und sollte ich Komposition nicht nur für "has-a" -Beziehungen bevorzugen? Ich denke, es ist in diesem Fall "is-a".Erwägen Sie die Verwendung eines komponentenbasierten Spielobjektsystems:
/programming/1901251/component-based-game-engine-design
Es ist ein sehr flexibler und moderner Ansatz, der sich gut für mittelgroße und große Spiele eignet.
quelle