Jan 142013
 

Stunde #2-11: Zeichnen der Spielfigur aus der StartingClass Klasse

Nun müssen wir viel Code in unser Programm implementieren. Ich versuche dabei, alles so einfach wie möglich zu halten und auch zu erklären. Trotzdem kann es passieren, dass euch ein paar Teile etwas schwammig erklärt vorkommen oder ihr euch wundert, wie man auf solche Lösungen kommt, wenn man selber programmiert. Dies ist einer der Fälle, wo es nicht unbedingt nötig ist, sich alles zu merken oder vollständig zu verstehen, weil es wirklich einfach ist, diesen Code in das Programm zu implementieren, aber sehr schwer ist, diesen komplett zu verstehen.

Wir werden in StartingClass.Java arbeiten.

1. Als erstes werden wir java.awt.Graphics; importieren.

2. Nun werden wir in der run() Methode (wo ist egal, am einfachsten ist es, alles, was zusammengehört, auch zusammen zu schreiben) ein paar Methoden einfügen: update(Graphics g) und paint(Graphics g). Dies haben wir schon mehrfach getan. Wir schreiben nach der run() Methode einfach update und drücken STRG + Leertaste und wählen in diesem Fall die erste Option, das Selbe tun wir mit paint.

Die update() Methode wird automatisch in einer Schleife ausgeführt und die paint() Methode wird durch repaint() in der run() Methode auch als Schleife immer und immer wieder ausgeführt.

I. Definieren der update ()-Methode:

Wir werden eine doppelte Pufferung (double buffering) verwenden, die Technik wird dazu genutzt, ein Flackern zu verhindern. Das Grundkonzept besteht darin, dass das momentane Bild für eine kurze Zeit gehalten wird, so wird eine glatte und natürliche Bewegung dargestellt.

1. Hinzufügen von Variablen unter private Robot robot;

private Image image;
private Graphics second;

2. Falls wir hier einen Fehler bekommen, importieren wir die nötigen Pakete mit Shift + STRG + O

3. Nun werden wir den folgenden Code anstelle der momentanen update()-Methode einfügen:

Die einzelnen Code Zeilen zu verstehen, sollte kein Problem sein, da wir diese alle schon behandelt haben. Zu verstehen, wie hier nun eine doppelte Pufferung erzeugt wird, ist jedoch wesentlich schwerer und mein Tipp ist: ignoriert und akzeptiert es einfach und lasst uns weiter machen. Wir werden zu einem späteren Zeitpunkt darauf zurück kommen.

II. Definieren der paint()-Methode

Diese Methode wird dazu verwendet, unsere Grafik auf dem Bildschirm zu zeigen. Momentan muss diese nur unseren Roboter anzeigen, daher besitzt diese auch nur ein Statement:

Nun ergeben sich hierdurch einige Fehler, auf welche wir nun nach und nach eingehen werden.

Die g.drawImage()-Methode verwendet die folgenden Parameter: g.drawImage(img, x, y, observer) – eine Bildvariable, die X- und Y-Koordinaten und einen ImageObserver (einen Bildbetrachter, was aber momentan noch etwas zu kompliziert ist und wir später behandeln werden).

In unserem Beispiel wird die character Variable unser Roboter Bild repräsentieren und soll diese 61 Pixel nach links und 63 Pixel über (centerX, centerY) zeichnen, und das Wort „this“ ist unser ImageObserver.

Momentan sollten wir folgende Fehler sehen und werden diese nach und nach beheben:

1

I. Die character Variable

1. Die character Variable ist noch nicht definiert, also müssen wir dies als erstes tun. Dazu gehen wir nach ganz oben n unserer StartingClass und suchen dort private Image image; und ergänzen es mit „, character“:

private Image image, character;

2. Nun müssen wir dieser Variable noch einen Wert geben. In diesem Fall werden wir der Variable ein Bild als Wert zuweisen. Um dies zu tun, müssen wir ein URL Objekt einfügen, womit wir Adressen wie C:\Bilder\bild.jpg einfügen können. Dazu schreiben wir unter private Image image,character; folgendes:

private URL base;

Hier müssen wir dann noch URL importieren.

3. In der init()-Methode werden wir nun URL definieren und der character Variable ein Bild zuweisen. Dazu müssen wir folgende Veränderungen tätigen:

4. Zuletzt müssen wir noch das Bild importieren. Dazu gehen wir im Package Explorer mit einem Rechtsklick auf src und erstellen dort mit NewFolder einen neuen Ordner, welchen wir data nennen. Nun ladet ihr das folgende Bild herunter, speichert es auf eurem PC und zieht es einfach in den data Ordner.

character

Damit sollten wir den charater Fehler aus der paint()-Methode gelöst haben. Falls dies nicht der Fall ist geht auf Project > Clean > OK.

Damit sollten wir alle beim folgendem Stand des Codes sein:

 

 II. Die get… Fehler

Nun haben wir noch die get… Fehler in unserer StartingClass:

2

Im ersten Teil dieser Lektion habe ich geschrieben, dass wir wie folgt vorgehen:

1. Ständig aktualisierte Methoden, die bei jedem Durchlauf der Spielschleife aufgerufen werden.

2. Methoden, die nur bei Spielereingaben gebraucht werden.

3. Hilfsmethoden, welche die Werte der Variablen in der Klasse abrufen und ändern.

Diese Hilfsmethoden haben wir nie erstellt, nun werden wir dies nachholen.

1. Öffnen wir Robot.java

2. Nun machen wir einen Rechtsklick irgendwo in den Weißraum der Robot.java. Im sich öffnenden Dialogfenster wählen wir Source > Generate Getters and Setters…

3

3.  Im Fenster „Generate Getters and Setters“ wählen wir Select all und bei Sort by weiter unten wählen wir First getters, then setters und bestätigen mit OK.

4

Was sind diese Getters und Setters?

In Java ist es üblich, Variablen, die nur in der Klasse benötigt werden, als private zu deklarieren. Wenn nun andere Klassen auf diese Variablen zugreifen wollen, benötigen sie Hilfsfunktionen, die Getters and Setters genannt werden.

Lasst und hierzu zwei kurze Beispiele ansehen:

public int getSpeedX() {
return speedX;
}

und

public void setSpeedX(int speedX) {
this.height = speedX;
}

Immer wenn eine Getter-Methode aufgerufen wird, gibt sie den Wert an meine neue Variable, hier speedX ab.

Wenn ich sage: setSpeed ​​(10); dann bekommt die Variable speedX einen Wert von 10.

Nun sollten wir folgenden Stand haben:

 

Stunde #2-12: Unsere Spielfigur bewegt sich

Startet mal die StartingClass und wir sollten alle nun folgendes sehen:

5

Nun werden wir die letzten Änderungen am Code vornehmen, um unsere Spielfigur zu bewegen.

Wir gehen nun in der StartingClass zur keyPressed()-Methode und ersetzen

mit

und unter der keyReleased()-Methode

mit

Als nächstes müssen wir noch in der run()-Methode robot.update(); aufrufen:

Wenn wir nun unser Programm starten, können wir mit den Pfeiltasten rechts und links unseren Roboter bewegen. Dies ist dann auch das Ende dieser Lektion. In der nächsten Lektion werden wir uns mit dem Hintergrund beschäftigen und unsere Spielfigur springen und sich ducken lassen

Source Code

Für diejenigen unter euch, die hier einsteigen möchten, ohne den ganzen Code abtippen zu müssen, habe ich das Projekt exportiert. Mit der Importfunktion könnt ihr das Projekt bequem bei euch einfügen. Unter der Kategorie Eclipse und Java > Import und Export habe ich erklärt, was dafür zu tun ist.

Lektion 4

Falls ihr Fragen habt, immer raus damit, ich helfe euch sehr gerne. Hinterlasst bitte einfach einen Kommentar.

Teilt diese Seite mit euren Freunden und besucht uns mal auf Facebook und auf Google+, das würde dieser Seite wirklich weiterhelfen, danke sehr. Auch ein Klick auf die Werbung hilft dabei, diese Seite am Laufen zu halten.

Quelle: Original Anleitung auf englisch von Kilobolt Studios

Lektion 4 – Spielfigur einbinden Teil 1 Lektion 5 – Hintergrund und Bewegungen