Feb 252013
 

Heute werden wir den letzten Teil der Kollisionserkennung behandeln. Dabei geht es um 2 Arten. Als erstes werden wir implementieren, dass unsere Kugeln den Gegner treffen und als zweites, ob unserer Roboter mit dem Heliboy kollidiert. Wir werden auch ein Punktesystem einführen, immer wenn wir den Gegner treffen, bekommen wir einen Punkt.

Kugel Kollision

1

Die Kugeln, welche wir in Kapitel 2 Lektion 7 erstellt haben, sind Rechtecke. Aus diesem Grund ist die Kollisionserkennung auch recht einfach zu implementieren.

Folgendermaßen werden wir vorgehen:

1. Wir werden jede Kugel ein Rechteck hinzufügen, dazu nehmen wir die projectiles ArrayList zur Hilfe.

2. Wir werden um unsere beiden Heliboys ein Rechteck legen. Da wir hier noch keine ArrayList haben, werden wir es einzeln machen. Wenn wir im nächsten Kapitel endlich für Android programmieren, werden wir die Enemy Klasse neu schreiben.

3. Solange die Kugeln auf dem Bildschirm angezeigt werden, also innerhalb von 800 sind, werden diese Rechtecke auf Kollisionen überprüft.

4. Falls eine Kollision auftritt, verschwinden die Kugeln.

 1. Erstellen eines rechteckigen Objekts

Dazu müssen wir einige Änderungen an unserer Projectile Klasse vornehmen. All diese Änderungen haben wir schon in den vorherigen Lektionen abgearbeitet, daher werde ich nur eine kurze Liste und die vollständige Klasse hier aufführen.

  • Rechtecke importieren
  • ein neues Rechteck bei den Variablen erstellen
  • das Rechteck im Konstrukteur aufrufen
  • das Rechteck immer wieder aktualisieren in der update()-Methode
  • wir setzen das Rechteck als 0, wenn die Kugel verschwindet
  • die checkCollision()-Methode aufrufen, wenn eine Kollision auftritt
  • einen Punkt hinzufügen für jede Kollision mit einem Gegner

 Projectiles Klasse

  beheben der Fehler

Wenn wir nun diese Änderungen vorgenommen haben, bekommen wir einige Fehler angezeigt. Diese Fehler spielen sich alle in der StartingClass ab, also öffnen wir nun diese.

1. Der erste Fehler liegt damit zusammen, dass hb und hb2 momentan als private deklariert sind. Daher werden wir sie nun als public um deklarieren.

2. Der nächste Fehler hat mit unserem Punktesystem zu tun, da wir dieses noch nicht erstellt haben, tun wir dies nun.

Als erstes erstellen wir die folgenden Variablen:

Damit erstellen wir eine Variable, welche unsere Punkte beinhaltet. Als nächstes haben wir ein Font Objekt erstellt, mit welchem wir unsere Punkte anzeigen.

Als zweites fügen wir den folgenden Code zur paint()-Methode hinzu:

Die erste Zeile des Codes setzt die Schriftart unserer graphischen Variable g zu font, welche wir voher als BOLD und Größe 30 deklariert haben.  Daher müssen wir noch Font importieren. Als nächstes haben wir die Farbe weiß ausgewählt, damit wird alles was nach dieser Zeile ausgeführt wird in weiß dargestellt, nur in der paint()-Methode. Mit der letzten Zeile lassen wir unsere Punkte, mit einem integeren String Objekt, anzeigen. Dies geschieht bei (740, 30). Damit sind wir am Ende der StartingClass und können diese schließen, hier nochmal die komplette Klasse:

ein Rechteck über die Gegner legen

Wir haben immer noch einige Fehler in unser Projectile Klasse. Daher werden wir nun die Enemy Klasse öffnen und ein paar Änderungen am Code vornehmen.

Wir haben unsere Heliboy Objekte erstellt, indem wir die Enemy Klasse als Superklasse deklariert haben und uns den Code von da besorgen. Wenn wir nun Änderungen an der Enemy Klasse vornehmen, ist unser Heliboy Objekt direkt davon betroffen.

Das Ziel ist nun, jedem Gegner ein Rechteck zu verpassen. Genau wie bei den Feldern, werden wir nur innerhalb der 25 Felder, die um unseren Roboter herum sind, ob hier eine Kollision stattfindet. Wenn nun irgendein Teil unseres Roboters rect, rect2, rect3 und rect4 einen Gegner berührt, werden wir Kollision auf dem Bildschirm, in diesem Fall in der Console in Eclipse, ausgeben.

Dazu müssen wir 3 Änderungen am Code vornehmen:

1. Ein Rechteck Objekt mit dem Namen r erstellen.

2. Die Rechtecke in der update()-Methode aktualisieren.

3. Eine checkCollision()-Methode erstellen.

Damit sind wir schon am Ende dieser Lektion. Wir haben ein Punktesystem eingeführt und können unsere Gegner abschießen und bei einer Kollision mit dem Gegner wird dies angezeigt. In der nächsten Lektion werden wir noch ein Gesundheitssystem einführen und den Tod des Roboters.

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+, dass würde dieser Seite wirklich weiterhelfen, Danke sehr. Oder ein Klick auf die Werbung, hilft dabei diese Seite am laufen zu halten.

Source Code

Falls einer hier einsteigen möchte oder nicht den ganzen Code abtippen möchte, habe ich hier das Projekt exportiert und ihr könnt diesen bei euch einfügen. Unter der Kategorie Eclipse und Import und Export habe ich erläutert wie ihr dies macht.

Kapitel 3 Lektion 7

Quelle: Original Anleitung auf englisch von Kilobolt Studios

Lektion 6 – Kollisionserkennung Teil 2 Lektion 8 – Gesundheitssystem