Skript Spiel-Text Zeichnen von Figuren

Werbung
Kü /Info Oberstufe
OOP - Spieleprogrammierung
SJ 2015/2016
Wie zeichnet man einfache Figuren in Java?
Ziel ist es zu verstehen, wie das Zeichnen von Formen mit Java grundsätzlich funktioniert.
Wenn du das verstanden hast, ist es relativ einfach, neue Spielerklassen zu entwerfen.
Eine Erklärung dazu gibt es hier:
 Video:
o http://perm.ly/oop-spiele-figuren-zusammenstellen
Schauen wir uns dazu zunächst die Methode getForm() von der Klasse Kachel an, denn sie ist
für das Aussehen der Kachel verantwortlich:
public Shape getForm(){
GeneralPath rechteck = new GeneralPath();
rechteck.moveTo(0 , 0);
rechteck.lineTo(breite, 0);
rechteck.lineTo(breite, hoehe);
rechteck.lineTo(0, hoehe);
rechteck.lineTo(0 , 0);
// transformieren:
AffineTransform t = new AffineTransform();
t.translate(xPosition, yPosition);
Rectangle2D umriss = rechteck.getBounds2D();
t.rotate(Math.toRadians(orientierung),umriss.getX()+
umriss.getWidth()/2,umriss.getY()+
umriss.getHeight()/2);
return
t.createTransformedShape(rechteck);
}
Diese gehen wir nun Stück für Stück durch, um zu verstehen, wie sie arbeitet und dann in
der Lage zu sein, Dinge zu ändern, um neue Spieler zu zeichnen.
1. Die erste Zeile: public Shape “getForm(){“ gibt den Namen und den Rückgabewert: Shape. Dieser Shape enthält nachher den Umriss des Spielers und kann an das
Spielfeld zum Zeichnen direkt weitergereicht werden. Shape ist eine Klasse, die Java
bereits vorgibt.
2. Die Zeile: GeneralPath rechteck = new GeneralPath(); erzeugt offensichtlich
ein Objekt rechteck, welches vom Typ „GeneralPath“ ist. Auch das ist eine Klasse, die von Java bereits vorgegeben wird und die zum Zeichnen von Objekten verwendet wird. Sie stellt folgende Methoden zur Verfügung:
-
moveTo(int x, int y)
lineTo (int x_neu, int y_neu)
append(…)
-
……
Um auf die Methoden von der Klasse GeneralPath zugreifen zu können, muss
man ein Objekt der Klasse GeneralPath erzeugen. Wir brauchen die Methoden,
um einzelne Linien zeichnen zu können. Der Spieler setzt sich dann nachher aus die-
Kü /Info Oberstufe
OOP - Spieleprogrammierung
SJ 2015/2016
sen einzelnen Linien (dem Path) zusammen. Daher wird das Objekt rechteck erzeugt. Über die Punktnotation (siehe Einschub I) kann das Objekt nun auf die Methoden zugreifen und Stück für Stück Linien zeichnen, die zu einem GeneralPath zusammengesetzt werden. Um diese Klasse verwenden zu können, wird am Anfang der
Klasse Kachel folgende Anweisung ausgeführt:
import java.awt.geom.GeneralPath;
Dadurch ist die Klasse und somit auch alle enthaltenen Methoden in unserer Klasse
Kachel bekannt. Sie wird sozusagen „hinzugenommen“.
3. Die Zeile: rechteck.moveTo(0 , 0); legt den Startpunkt des neu zu schaffenden
Objektes fest – von hier aus werden die folgenden Linien gezogen (bis zum nächsten
rechteck.moveTo…)
4. Die Zeile: rechteck.lineTo(breite, 0); zieht eine Linie von dem zuletzt angegebenen Punkt (hier (0,0)) zu einem neuen Punkt (0+breite, 0+0). Allgemein hieße die
Anweisung: : rechteck.lineTo(x, y); dadurch würde von dem vorher gegebenen
Punkt (xalt, yalt) nun eine Linie gezogen zu dem Punkt (xalt+x, yalt+y).
5. Die weiteren Zeilen ergeben sich aus 4. Analog.
6. Der zweite Teil bleibt erst einmal eine Art „black box“:
// transformieren:
AffineTransform t = new AffineTransform();
t.translate(xPosition, yPosition);
Rectangle2D umriss = rechteck.getBounds2D();
t.rotate(Math.toRadians(orientierung),umriss.getX()+
umriss.getWidth()/2,umriss.getY()+
umriss.getHeight()/2);
return
t.createTransformedShape(rechteck);
Hier wird die Kachel mit dem gesamten GeneralPath einfach nur verschoben und
gegebenenfalls gedreht. Denn wir haben sie ja zunächst oben links in der Ecke gezeichnet – auf dem Spielfeld soll sie aber vielleicht an einer ganz anderen Position
und gedreht – aber mit dem gleichen GeneralPath erscheinen.
Beachte: das Objekt existiert nun im Prinzip in zwei Darstellungen:
Als Objekt mit gespeicherten Werten in
den Instanzvariablen
Als Shape mit Punktkoordinaten gespeichert:
Kü /Info Oberstufe
OOP - Spieleprogrammierung
SJ 2015/2016
Woher kommen all diese vorgegebenen Klassen und woher weiß man, was sie können,
bzw. welche Methoden man dadurch verwenden kann?
Es gibt sogenannte Java-Klassenbibliotheken (API), in denen alle bereits geschriebenen und
für die Allgemeinheit zur Verfügung gestellten Klassen geordnet und verfügbar gemacht
wurden. Über die import Anweisung können diese Klassen dem eigenen Projekt bzw. der einzelnen Klasse hinzugefügt werden, so dass davon dann auch Objekte abgeleitet werden können und die Methoden der hinzugefügten Klassen über diese Objekte dann zur Verfügung
stehen.
Herunterladen