Kollisionserkennung - Idee

Kenan89

Bekanntes Mitglied
Hallo,

in Java gibt es ja die einfache Methode insertecs, oder so ähnlich, mit der man 2 Rechtecke auf Kollision überprüfen kann.

Auf meiner Spielkarte habe ich z.B. 10 objekte(Menschen, Tiere, etc) die sich bewegen. Es läuft so ab:
Obj1 wird mit allen Objekte auf Kollision überprüft und alle Objekte mit den es kollidieren würde, erhalten ein boolean auf trúe gesetzt, welches ihnen verbietet, sich in die Gegenrichtung des Helden zu bewegen, denn wenn der Held rechts geht und mit Obj2 kollidieren würde, muss seine Bewegung zurückgesetzt werden und Obj2 darf dann natürlich auch nicht nach links, da er sonst mit dem Helden kollidieren würde.
So ist folgende Struktur möglich:

Kollisionsüberprüfungen der Rectangles:

Obj1 mit Obj2
Obj1 mit Obj3
Obj1 mit Obj4
Obj1 mit Obj5

Obj2 mit Obj3
Obj2 mit Obj4
Obj2 mit Obj5

Obj3 mit Obj4
Obj3 mit Obj5

Obj4 mit Obj5

Coole Methode oder? Was haltet ihr davon? Wird es vielleicht sogar in der professionellen Spieleindustrie so gehandhabt?
 
deine Auflistung ist alle Kombinationen der 5 Objekte untereinander, das scheint nicht so besonders sein,

wenn du von links und rechts sprichst, dann sind die Objekte alle auf einer Linie?
das solltest du ausnutzen, in dem du sie ständig in einer Liste in korrekter Reihenfolge hälst,
evtl. erlaubtes Überholen macht zwar Arbeit, Kollision wäre dann aber nur noch zwischen benachbarten Objekten zu prüfen,
hier 5 statt 10 Vergleiche
 
Ich denke mal es wird wohl einige Spiele geben, bei denen eine Art Methode wie du sie beschrieben hast verwendet wird. Fakt ist jedoch, dass das Thema collisiondetection bei jedem Spiel unterschiedlich ist. Es gibt vlt. Pseudocodes welche einem auf die richtigen Wege bringen, es jedoch zu verallgemeinern wäre falsch. Jedes Spiel verhält sich schließlich unterschiedlich bei bestimmten Ereignissen.

Auch muss man möglichst darauf achten, dass die performance nicht unter unnötigen Berechnungen leidet.

Fazit von mir, wenn es für dein Spiel funktioniert, why not. Obs die profis auch so handhaben müsstest du mal google fragen, mir liegen jetzt keine Blizzard Sourcecodes vor ;D
 
deine Auflistung ist alle Kombinationen der 5 Objekte untereinander, das scheint nicht so besonders sein,

wenn du von links und rechts sprichst, dann sind die Objekte alle auf einer Linie?
das solltest du ausnutzen, in dem du sie ständig in einer Liste in korrekter Reihenfolge hälst,
evtl. erlaubtes Überholen macht zwar Arbeit, Kollision wäre dann aber nur noch zwischen benachbarten Objekten zu prüfen,
hier 5 statt 10 Vergleiche

Die Spielkarte ist unter umständen größer als der screen. es geht in richtung x und y, also nicht in eine Linie.
 
Wenn es wirklich viele, viele, sehr viele Objekte sein sollten, müsstest du über sowas wie einen Quadtree (Wikipedia) nachdenken. Bei 5 Objekten, machs so wie bisher, bei Vielfachen von 10 vllt dann schon die Objekte zB nach Höhe sortieren. (Warst du der, dem ich die TreeMap empfahl? Dann sind die eh nach y-Wert sortiert, dann musst du nur für Indizes [y-100;y+100] um ein Objekt herum prüfen (vorrausgesetzt das größte Objekt ist 100 hoch).)
 
Kollisiondetection mit "BoundingBoxes" ist afaik meistens schon der 2. Schritt. Als erstes würde ich für zwei Objekte BoundingSpheres verwenden, deren Radien ich von der Distanz ihrer Mittelpunkte abziehe. Solange dieses Ergebnis positiv ist kann auch keine Kollision der BoundingBoxes erfolgen.
 

Zurück
Oben