Jan 202013
 

In dieser Lektion werden wir unserer Spielfigur die Möglichkeit geben, Kugeln abzufeuern. Treffen können diese leider noch nichts, aber damit legen wir einen Grundstein für die nächsten Lektionen, wo wir unter anderem die Kollision zweier Objekte behandeln werden. Wie werden wir heute vorgehen? 1. Wir werden eine Projectiles (Kugel) Klasse erstellen, welche wir als Bauplan für all unsere Kugeln nehmen werden. 2. Innerhalb der Roboter Klasse werden wir eine Methode erstellen, welche das Schießen handhabt. 3. In der StartingClass werden wir unsere Kugeln zeichnen lassen und uns die Möglichkeit geben, sie mit der Strg-/Ctrl-Taste (Steuerung bzw. Control) abzufeuern.

Stunde #2-20: Erstellen der Kugeln Klasse

Wir erstellen hier nun den Entwurf unserer Kugel. Dabei gehen wir genauso vor wie in allen anderen Klassen: 1. Erstellen der Projectile Klasse 2. Variablen definieren 3. Erstellen einer update()-Methode 4. Hilfsmethode erstellen

I. Erstellen der Projectile Klasse

1. Rechtsklick auf Basteldroid Paket, danach New > Class auswählen.

2. Name Projectile

3. Die Box mit Constructors from superclass: auswählen.

4. Mit Finish bestätigen.

II. Variablen erstellen

Lasst uns kurz darüber nachdenken, welche Variablen wir benötigen? Unser Projektil bzw. die Kugel hat eine Geschwindigkeit, X- und Y-Koordinaten und sehen wollen wir sie auch, also werden wir Folgendes hinzufügen:

Nun müssen wir noch einige Änderungen an unserem Konstrukteur vornehmen. Momentan nimmt dieser keine Parameter. Wir wollen, dass er immer die obere linke Ecke unserer Kugel nimmt, also startX und startY. Innerhalb des Konstrukteurs werden die Variablen startX und startY in x und y geändert, die Geschwindigkeit der Kugel bekommt einen Wert zugewiesen und es wird eingestellt, dass die Kugel sichtbar ist.

III. Erstellen der update()-Methode

Diese Methode wird wie in allen anderen Klassen immer aktualisiert. Daher ändern wir hier die Position der Kugeln im Verhältnis zu der Geschwindigkeit und stellen ein, wie sie reagiert, wenn sie mit einem Objekt kollidiert. Die Kollision werden wir aber erst in einer späteren Lektion lernen. Nun werden wir die update()-Methode erstellen und die benötigten Variablen einfügen.

Die Anweisung x += speedX; wird nun kontinuierlich die X-Koordinate aktualisieren, indem die Geschwindigkeit in x-Richtung hinzu addiert wird. Sobald die Kugel außerhalb des Bildschirms ist, soll sie entfernt werden, so belegt diese nicht unnötig Speicher.

IV. Getters and Setters

1. Rechtsklick am Ende unseres Codes, dann Source > Generate Getters and Setters… 2. Select all 3. OK Damit haben wir unsere Projectile Klasse fertig gestellt.

Stunde #2-21: Erstellen einer ArrayList in der Roboter Klasse

Es wäre wirklich sehr aufwendig, jede einzelne Kugel zu programmieren, die unser Roboter abschießen kann, wenn wir auf Schießen drücken. Daher werden wir eine Liste in unser Spiel implementieren namens ArrayList. Diese erlaubt uns, unser Projectile Objekt in einem Container von zunehmender Größe zu speichern. 1. Als Erstes werden wir unsere neue Variable in Robot.java erstellen und ArrayList importieren.

2. Unterhalb der jump()-Methode werden wir eine weitere neue Methode hinzufügen: shoot().

Diese Methode erstellt  eine neue Kugel und gibt ihr den Namen p. Gleichzeitig fügt sie diese zu der Projectile ArrayList hinzu. Die Kugel wird 50 Pixel neben der Mitte und 25 Pixel über der Mitte des Roboters erstellt, also genau da, wo unsere Pistole ist. 3. Nun erstellen wir noch eine Getter Methode, welche wir einfach am Ende des Codes hinzufügen.

Damit können wir aus anderen Klassen auf die ArryList zugreifen.

Stunde #2-22: Zeichnen der Kugel in der StartingClass

I. Änderung der run()-Methode

Als Erstes importieren wir die ArrayList auch in der StartingClass und ergänzen dann die run()-Methode durch Folgendes:

Was haben wir hier nun geschrieben? Wir haben eine neue ArrayList mit dem Namen projectiles erstellt und ihr den Wert aus der Projectiles ArrayList aus der Robot Klasse zugewiesen. Als Nächstes haben wir eine Schleife erstellt, welche so lange läuft, wie i kleiner ist als die Größe der projectlies ArrayList, dies ist die Zahl der Kugeln, die darin gespeichert sind. Als Nächstes überprüfen wir, welche Kugel wir abfeuern, die 1., 2., 3. oder 4. aus unserer ArrayList, also die Kugel mit dem Index i.

Zur Veranschaulichung hier noch ein anderes Beispiel: Angenommen, wir haben ein Array Liste = [1, 2, 3, 5, 7], dann haben die einzelnen Elemente die Indizes 0, 1, 2, 3, und 4. Also durchläuft unsere Schleife die komplette ArrayList und setzt unser Objekt mit p (aus der Robot Klasse) gleich.

Nachdem dies passiert ist, wird überprüft, ob die Kugel noch sichtbar ist. Ist dies nicht der Fall, wird p entfernt, indem einfach i aus der projectiles ArrayList entfernt wird. Um es zusammenzufassen, wir haben hier eine Schleife geschrieben mit einem Index i in der projectiles ArrayList, welcher sich immer um 1 erhöht. Diesen Index haben wir mit p gleichgesetzt und überprüfen dadurch, ob die Kugel noch innerhalb des Bildschirms ist (dann fliegt die Kugel weiter) oder bereits außerhalb (dann wird die Kugel wird gelöscht).

II. Änderung der paint()-Methode

Auch hier haben wir eine neue ArrayList erstellt, die Liste aus der update()-Methode ist auch nur in dieser benutzbar, also müssen wir in einer neuen Methode eine neue Liste erstellen. Des Weiteren haben wir eine gelbe Kugel gezeichnet, welche 10 Pixel breit und 5 Pixel hoch ist.

Stunde #2-23: Schießen

Das Einzige, was uns noch fehlt, ist eine Taste, mit der wir unsere neu erstellte Kugel auch abfeuern können. Wir nehmen die STRG- bzw. CTRL-Taste . Dazu müssen wir unsere keyPressed()-Methode ändern.

Für den Fall, dass die CONTROL-Taste gedrückt wird, haben wir hier eingestellt, dass die shoot()-Methode aufgerufen wird. Gleichzeitig überprüfen wir, ob unser Roboter sich duckt oder gerade springt oder beides. Nun können wir das Spiel starten und unsere Kugeln abfeuern. Damit sind wir auch schon am Ende dieser Lektion. Mittlerweile wiederholen sich die meisten Dinge immer und immer wieder, also werde ich versuchen, diese Erklärungen einzukürzen. In der nächsten Lektion werden wir uns mit Animationen beschäftigen.

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.

Kapitel 2 Lektion 7

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 6 – Gegner Lektion 8 – Animationen