C++ und SFML – Teil 11 – Kollisionserkennung „Quick and Dirty“

Kollisionserkennung wird dazu benötigt um etwa zu erkennen, ob ein Schuss einen Asteroiden trifft. Im folgenden Tutorial wird gezeigt, wie man das ganz einfach (aber unschön) realisieren kann. Leider habe ich bei der Aufnahme nicht bedacht, dass der Schuss verschwinden sollte, sobald er getroffen hat. Dafür sind ein paar kleine Änderungen nötig, die ich unter dem Video erläutere.

Schüsse verschwinden lassen:

Dafür müssen wir zunächst die Kollision-Klasse ändern. In der Methode „box2box“ ist als erster Parameter sf::Sprite &Obj angegeben. Über das Sprite selbst haben wir aber natürlich keinen Zugriff auf das eigentliche Objekt und dessen Member. Deshalb ändern wir diesen Parameter zu „std::vector<Bullet>::iterator &Obj“. Damit übergeben wir also den Iterator per Referenz und können den Schuss bei Kollision direkt inaktiv schalten.

In der kollision.h steht nun also:

 

Zusätzlich müssen wir in dieser Datei auch entsprechend bullet.h via #include einbinden. Und dort daher auch in den ersten beiden Zeilen folgendes einfügen:

Und am Ende des Codes das #endif nicht vergessen.

Auch in der kollision.cpp müssen wir nun natürlich den Parameter genauso ändern.

Dort ändern wir auch folgende Zeilen:

in

Und können nun im gleichen if-Block folgendes ergänzen:

Abschließend in der Main.cpp noch folgende Zeile

entsprechend wie folgt ändern:

 

Und nun verschwinden auch die Schüsse beim Abschießen der Asteroiden. 🙂