Ziel des Tutorials

Nach erfolgreichem Abschluss dieses Tutorials kannst du animierte Spielfiguren erstellen und in dein Spiel einbinden. Außerdem kennst du bereits einige Möglichkeiten, mit denen du deine Spielfiguren zur Laufzeit modifizieren kannst.




Einführung

Ein Spiel, das nur mit unbewegten Bildern oder gar nur mit geometrischen Objekten funktioniert, ist für jemanden, der es nicht programmieren, sondern nur spielen will, meist nicht sonderlich reizvoll.

Deshalb gibt es in der Engine Alpha die Möglichkeit, ein ganz besonderes grafisches Element einzubinden, nämlich Figuren.

Eine Figur ist ein animiertes Bild. Ähnlich wie bei einem Daumenkino besteht eine Figur aus mehreren Bildern, die immer wieder hintereinander durchgewechselt werden, wobei immer eines sichtbar ist.

Jedes dieser Bilder besteht aus einer Fläche von Unterquadraten, ähnlich wie ein kariertes Blatt. Jedes dieser Unterquadrate kann leer sein (dann ist es unsichtbar) oder eine Farbe haben (dann wird dieses Unterquadrat mit dieser Farbe gefüllt. Die Länge aller Unterquadrate der Figur lässt sich immer variabel ändern, auch während das Spiel läuft, in Vielfachen der Pixellänge.

Um eine Figur in Dein Spiel zu bringen, musst Du zwei Schritte ablaufen:

  • Die Figur erstellen und speichern
  • Die Figur laden und ins Spiel einbringen


Erstellen einer Figur

Hierzu gibt es den Figureneditor. Dies ist ein zusätzliches Programm, mit dem man Figuren erstellen kann. Dieser ist im Programmierkit enthalten, solltest Du ihn nicht bereits entdeckt haben. Die Datei kann auf Windows direkt mit Doppelklick geöffnet werden. Auf Linux muss die Figureneditor-Datei zunächst ausführbar gemacht werden. Dann kann über Rechtsklick „Ausführen mit..“ aufgerufen werden und das Hauptfenster des Editors startet. Von dort aus kannst Du eigene Figuren neu erstellen oder öffnen.


Hier kann man die einzelnen Bilder befüllen und die Figur erstellen. Ist sie fertig, muss sie als ".eaf"-Datei (Engine Alpha Figur) gespeichert werden und kann dann ins Spiel geladen werden.

Die Figur sollte möglichst geschickt das Unterquadratfeld einnehmen, denn dies verbessert die Kollisionstests. Außerdem ist eine möglichst flächendeckende Figur platzsparender.


Laden und Einbringen einer Figur

Geladen wird die Figur über den folgenden Konstruktor:

public Figur(int x, int y, String pfad)

Wobei die Parameter x und y - wie immer – die Koordinate der linken oberen Ecke der Figur angeben und der Parameter pfad das Verzeichnis, unter dem die entsprechende Figurdatei zu finden ist. Ins Spiel gebracht werden kann diese Figur dann wie ein Bild oder ein Rechteck, denn auch diese Klasse leitet sich aus Raum ab und lässt sich somit behandeln wie alle anderen grafischen Elemente auch.

Das volle Laden und Einbringen soll dieser Quellcode verdeutlichen:

/* Irgendwo in der spielsteuernden Klasse */
Figur figur = new Figur(30, 30, "rakete.eaf");
wurzel.add(figur);

Die Datei „rakete.eaf“ befindet sich im Projektordner dieses Projekts. Das Beispiel ist als funktionierendes Programm einsehbar.

Die Animation eines Bildes lässt sich problemlos starten und anhalten über die folgende Methode:

public void animiertSetzen(boolean animiert)

Über diese Methode lässt sich die Geschwindigkeit, in der die Animationsbilder wechseln, ändern:

public void animationsGeschwindigkeitSetzen(int intervall)

Diese Methode ändert die Animationsgeschwindigkeit dieser Figur. Sobald die eingegebene Zeit in Millisekunden (das intervall) abgelaufen ist, wird das sichtbare Bild der Figur gewechselt.


Figuren Modifizieren

Man kann Figuren sehr leicht verändern – zur Laufzeit und beliebig oft! Du kannst mit einer Figur verschiedene Änderungen machen. Im Folgenden bekommst du einen Überblick.


Die Größe von Figuren ändern

Jede Figur hat einen Größenfaktor. Der Größenfaktor gibt an, wie groß ein Unterquadrat in Pixeln ist. Du kannst diesen Größenfaktor über den Aufruf folgender Methode ändern:

public void faktorSetzen(int faktor)

Der Wert faktor kann beliebige Werte über 0 annehmen. Dies ist die einfachste Form der Veränderung einer Figur.


Die Figur spiegeln

Eine Figur kann auf 2 Arten gespiegelt werden: waagrecht oder senkrecht. Hierfür gibt es je eine Methode:

Diese Methode spiegelt an einer imaginären X-Achse, also waagrecht:

public void spiegelXSetzen(boolean gespiegelt)

Diese Methode spiegelt an einer imaginären Y-Achse, also senkrecht:

public void spiegelYSetzen(boolean gespiegelt)


Farben einer Figur ändern

Die Farben einer Figur lassen sich auf verschiedene Arten ändern.


Die Figur aufhellen oder abdunkeln

Eine Figur kann "heller" werden. Dies funktioniert über folgende Methode:

public void heller()

Diese Methode spiegelt an einer imaginären Y-Achse, also senkrecht:

public void abdunkeln()

Achtung! heller() und dunkler() sind nicht symmetrisch! Das bedeutet: Wenn du heller() aufrufst und später dunkler(), muss dies nicht bedeuten, dass deine Figur genauso aussieht wie vorher. Minimale Veränderungen sind möglich, weil hier intern gerundet wird.


Die Figur einfärben

Man kann eine Figur auch einfach vollkommen einfärben. Das bedeutet, dass jedes nicht durchsichtige Unterquadrat dieselbe Farbe bekommt. Diese Methode lautet folgendermaßen:

public void einfaerben(String farbe)
public void einfaerben(Farbe farbe)

Hiermit lässt sich die Figur einfärben. Willst du „speziellere“ Farben als die Standard-Farben kannst du anstatt einem String- auch ein Farbe-Objekt eingeben. Was das ist und wie es funktioniert, erläutert das Tutorial zu Farben.


Zusammenfassung

Wenn du eine Zusammenfassung von allen Funktionen von Standard-Figuren möchtest, schaue dir die Dokumentation der Klasse Figur an. Ein Beispielprojekt ermöglicht dir zusätzlich, ein bisschen mit den Funktionen zu experimentieren.


Was geht noch?

Damit ist noch nicht das Ende der Figuren-Möglichkeiten erreicht. Die Engine Alpha bietet noch weitere Klassen, die die Grundfunktionalität von Figuren erweitern:

  • Die ActionFigur ermöglicht verschiedene Zustände deiner Spielfigur (zum Beispiel je einen für Stehen, Laufen, Springen etc.).
  • Die Klasse CombiFigur ermöglicht Figuren, die aus einzelnen Action-Figuren bestehen. Damit lässt sich zum Beispiel Eine Armbewegung (nach vorne, werfen, etc.) unabhängig von der anderen Bewegungen der Figur (Kopf, Körper, Beine etc.) realisieren.


Probleme?

Du kannst ein einfaches Beispielprojekt, das eine Figur lädt und sie verändern kann, herunterladen, testen und einsehen.