![]() |
EOS 2
1.1.0
Einfache Objektbasierte Sprache
|
Kollisionserkennung. Mehr ...
Öffentliche Methoden | |
CollisionDetection (Game game) | |
void | addObject (Sprite sprite) |
void | removeObject (Sprite sprite) |
void | checkCollision () |
Kollisionserkennung.
Diese Klasse ist nicht gegen parallele Zugriffe gesichert (nicht Threadsafe), daher benötigt jeder Thread sein eigenes Objekt.
Objekte dieser Klasse sind in der Lage zweidimensionale Kollisionen effizient zu berechnen. Hierzu wird die Kollision in mehreren Phasen berechnen.
Zuerst werden Überlappungen über umgebende Rechtecke angenähert.
Danach werden potenielle Kollisionen einzeln überprüft.
Details:
Es wird eine Liste der x Intervalle der Rechtecke erzeugt. 1.x0, 1.x1, 2.x0, 3.x0, 2.x1, 3.x1, 4.x0, 4.x1 Hier überlappen Intervall 2 und 3. Daher kann hier eine Kollision vorliegen. Nun werden die y Grenzen des Kandiaten geprüft. Besteht die Kollision auch diesen Vortest, wird die exakte Berechnung durchgeführt
Dieses Verfahren ist im Prinzip immer noch O(n²). Dies lässt sich aber grundsätzlich nicht vermeiden, da es n² Kollisionen geben kann.
Definiert in Zeile 34 der Datei CollisionDetection.java.
de.lathanda.eos.game.geom.CollisionDetection.CollisionDetection | ( | Game | game | ) |
Neues Objekt
Definiert in Zeile 44 der Datei CollisionDetection.java.
void de.lathanda.eos.game.geom.CollisionDetection.addObject | ( | Sprite | sprite | ) |
Registriert ein Spielobjekt für die Kollisionserkennung, dies darf niemals von Sprite#render(Picture) aus geschehen. Neue Objekte dürfen nur über Sprite#update() registriert werden.
sprite | Spielobjekt |
Definiert in Zeile 56 der Datei CollisionDetection.java.
void de.lathanda.eos.game.geom.CollisionDetection.checkCollision | ( | ) |
Berechnet alle Kollisionen. Abhängig von der Anzahl der Objekte und tatsächlich vorliegender Kollisionen kann dieser Aufruf sehr lange dauern.
Definiert in Zeile 76 der Datei CollisionDetection.java.
void de.lathanda.eos.game.geom.CollisionDetection.removeObject | ( | Sprite | sprite | ) |
Entfernt ein Spielobjekt aus der Kollisionserkennung
sprite | Zu löschendes Weltobjekt |
Definiert in Zeile 66 der Datei CollisionDetection.java.