2D Game Engine
Verfasst: Mi Okt 31, 2012 7:44 pm
Hiho, ich bastel derzeit an einer isometrischen Game Engine (2D, basierend auf SDL). Irgendwie habe ich das Gefühl, dass etwas konzeptionell wichtiges fehlt
Also bisher besteht sie aus folgenden Komponenten:
Erscheint euch das soweit erstmal sinnvoll?
LG Glocke

Also bisher besteht sie aus folgenden Komponenten:
- State Machine: Für verschiedene Zustände des Spiels (Hauptmenü, Untermenü, eigentliches Spiel) werden Zustände (States) verwendet. Von einem Zustand kann in den nächsten gewechselt werden. Dabei enthält ein State sowohl Daten als auch Funktionalität zu deren Präsentation, sowie die Programmlogik dazwischen (vgl. Model-View-Controller).
- Application-Klasse: Das Herzstück der "Engine", basierend auf der State Machine. Sie besitzt Methoden zum Laden von Grafiken (aus Dateien, diese werden in einer map<string, SDL_Surface*> zwischengespeichert, damit man nicht immer wieder alles neu laden muss). Dazu kommen Methoden zum Laden von Sounds (werden analog "gecacht") und zum Rendern von UTF-16 Strings (basic_string auf Basis von Uint16) zu SDL_Surface*
- Sprite- bzw. Animation-Klasse: In diesem Kontext wahrscheinlich klar, was das ist
Sprites erhalten im Konstruktor den Pointer auf die Application (und damit auf die Surface, die den Bildschirm repräsentiert). Somit kann sich der Sprite "selber malen" (z.B. durch Aufruf der draw()-Methode)
- Input Handling: Erfasst, welche Tasten (oder Mausbuttons) gedrückt wurden, so dass über die StateMachine dann abgefragt werden kann, ob in diesem logischen Durchlauf z.B. die linke Maustaste gedrückt wurde.
- Network-Stuff: Für TCP-Kommunikation habe ich da eine Connection-Klasse, die Daten via Socket schreibt und liest. Damit es "schön" verwendbar ist, ist das ganze noch mit einem generischen Hauch versehen ^^ (z.B. int i = conn->read<int>();) Ausstehend ist hier noch das UDP-Pendant.
- IsometricView: Quasi die Grundstufe der isometrischen Darstellung (vgl. View in MVC). Beschreibt die grafische Darstellung einer isometrischen Karte, bewegt Objekte (optisch) auf ihr hin und her. Dabei verhält sich die View wie ein Sprite (ich meine damit sie kennt die Bildschirm-Surface und kann sich - und ihre einzelnen Kacheln und Objekte - malen).
- TiledModel: Quasi die Grundstufe der gekachelten Karte aus Datensicht (vgl. model in MVC). Beschreibt den Zustand der Objekte (eigentliche "Ingame-Position") auf der Karte, bewegt Objekte (intern) auf ihr hin und her, prüft Kollisionen und solche Späße.
- Widget: Für Buttons, Eingabefelder, Checkboxen und Listenfelder habe ich (basierend auf der Sprite-Klasse) Widget-Klassen geschrieben. In der State-logic werden ihre Zustände (zb ob ein Button geklickt wurde oder was in einem Listenfeld ausgewählt wurde) ausgewertet.

LG Glocke