Teil 8: Der Gleiter des Spielers

Wir wollen nun so schnell wie möglich mal was bewegtes auf den Bildschirm bringen, und überlegen uns dazu, welche Attribute ein Raumschiff für die Darstellung auf dem Bildschirm braucht.

Die Antwort ist einfach: eine Koordinate. Damit kommen wir zu einer ganz einfachen Basisklasse für Objekte in unserem Weltraum:

Datei objects/Entity.h

Damit hätten wir das mit der Position schonmal geklärt. Das ist aber noch nicht alles. Ein Objekt sollte sich nach Möglichkeit auch selbst Zeichnen können, und außerdem wollen wir den Objekten auf dem Bildschirm ja auch gerne ein Eigenleben einhauchen, sei es, in Form von Spielersteuerung, oder von KI. Außerdem muß ein Objekt evtl. Grafiken und andere Resourcen laden und entladen. Wir fügen also noch ein paar Funktionen im public Bereich hinzu:

Die Idle Funktion sollte dir ja schon bekannt vorkommen. Hier werden wir gleich die Tastaturabfrage für das eigene Schiff sowie später die KI für die Gegner einbauen. Initialize und Uninitialize sind wie bereits besprochen für das Laden und Entladen von Resourcen verantwortlich. Draw letztendlich wird diese Resourcen auf den Bildschirm bringen. In unserem Fall wird es wohl keinen Unterschied machen, ob man in ein und der selben Funktion die KI abhandelt und das Objekt zeichnet, manchmal macht es aber Sinn, beides zu trennen, deshalb nehmen wir diese Trennung direkt von Anfang an vor.

Jetzt brauchen wir mal den Gleiter aus dem letzten Teil. Hier gibts das Bitmap. Speichere die Datei in einem Unterverzeichnis resource/gleiter. In das resource-Verzeichnis werden wir fortan alle Grafiken speichern. Damit das ganze schön übersichtlich bleibt, unterteilen wir das Verzeichnis auch noch. Ordnung ist das halbe Leben, oder so ähnlich ;)

Für den Gleiter leiten wir also mal eine einfache Klasse ab. Als einzige Erweiterung kommt die Gleiter-Grafik hinzu, die in einem SDL_Surface* gespeichert wird:

Datei objects/Glider.h

Wir kümmern uns erstmal um die Anzeige des Gleiters. Dazu muß die Grafik in der Initialize-Funktion geladen, und ein Colorkey festgelegt werden. In der Funktion Draw wird das Surface dann auf den Bildschirm gebracht, und in Uninitialize letztendlich wieder freigegeben.

Datei objects/Glider.cpp

Hiermit wird der Gleiter zunächst an seiner Position m_fX, m_fY (die vorerst mit (0, 0) initialisiert wird) auf das Backsurface gebracht. In der Funktion Initialize wird ein Problem offensichtlich: Wird eine Grafik nicht gefunden, stürzt das Programm spätestens beim nächsten Befehl ab. Deshalb werden wir uns im nächsten Teil erst einmal mit Fehlerbehandlung befassen. Damit wir aber in diesem Teil mal endlich was auf dem Bildschirm sehen, fügen wir den Gleiter testweise in die GSGame.h ein:

Datei game/GSGame.h

Wenn wir so bei jedem Objekt vorgehen würden, hätten wir am Ende ein ziemliches Chaos an Variablen, da retten auch Arrays nicht viel. Wir werden also bald noch eine Managerklasse hinzufügen, die sich um das Leben und Ableben unserer Entities im Spiel kümmert. Vorerst aber initialisieren und zeichnen wir den Gleiter in GSGame.cpp:

Datei /GSGame.cpp

Damit ist unser Gleiter auf dem Bildschirm:

TODO

Letztendlich wollen wir zur Entspannung nach soviel Arbeit auch noch ein wenig mit dem Gleiter auf dem Bildschirm umherfliegen. Dazu fügen wir ein wenig Tastaturabfrage in die CGlider::Idle Funktion ein:

Die Bewegung ist natürlich alles andere als realistisch, aber als kleines Etappenziel reicht sie uns vorerst.

Download

Popularity: 1%


Write a Comment

Take a moment to comment and tell me what you think. Some basic HTML is allowed for formatting.

Reader Comments

Be the first to leave a comment!




FireStats icon Powered by FireStats