Kollisionserkennung

Pommes9485

Bekanntes Mitglied
Hallo,

momentan handhabe ich es so, das wenn ich mich bewege eine Methode ausführt, welche berechnet ob die Position zu der ich will OK ist, oder nicht. Dazu gehe ich die Liste aller Elemente durch und gebe True oder false zurück. Ist Performance Technisch sicherlich verbesserungswürdig, aber gut...

Nur ich bekomme einfach die Bedingung nicht auffe Reihe.
Momentan :
Java:
float x1, y1,z1;
        x1=tmp.gibDaten()[0];
        y1=tmp.gibDaten()[1];
        z1=tmp.gibDaten()[2];
        if(-x<=x1+1 && -x >= x1-1 && y1>=1 || -z<=z1+1 && -z>=z1+1 && y1>=1 )
        {
        geht =false;
        System.out.println("NICHT");
        }
        
        }
x1,y1,z1 sind die Daten vom aktuellen Block, während x,y,z die Position ist, zu der ich hin möchte.
Die Daten sind logischerweise die Mittelpünkte und haben einen Radius von 1.

Da man momentan (und vll auch nie) nicht springen kann, habe ich die y-Werte darauf beschränkt, das ich über den Boden laufen kann, dieser liegt bei 0, +1 für den Radius....

Momentan ist es so, das ich mich nie bewegen kann, egal wie hoch ich bin... Habe auch schon einiges durchprobiert, aber ich habe da vermutlich einen Denkfehler drinne.

P.S.: Die Werte x,y und z sind negativ, daher drehe ich sie zum vergleichen um, die Positionen passen aber alle ...
 

tdc

Bekanntes Mitglied
Ach ja, mein Lieblingsthema. *hust*

Aha, du hast also Blöcke

Die Daten sind logischerweise die Mittelpünkte und haben einen Radius von 1.
Logischerweise? Nein, das macht keinen Sinn. (edit: bzw. es macht wenig sinn, es so zu machen)

Entweder du hast Blöcke mit x, y, z und breite, höhe, tiefe oder du hast Kugeln mit einem Mittelpunkt und Radius.


Da ich mich zufälligerweise gerade mit Kollisionserkennung beschäftige, kann ich dir mal einen Ansatz mit AABB (Axis Aligned Boundig Boxes) geben:

Wenn du von jedem Objekt x, y, z, breite, höhe, tiefe hast, musst du überprüfen, ob sich die Bounding Boxes auf allen Achsen überschneiden. Denn wenn sich zwei BBs zwar auf der X und auf der Z-Achse von den Koordinaten her überschneiden, kann es dennoch sein, dass die eine BB sich auf der Y-Achse viel weiter oben befindet und es somit nicht zu einer Kollision kommt.

Beispiel für die X-Achse:
Java:
if(	(a.getX() >= b.getX() && a.getX() <= b.getX() + b.getWidth()) ||
			(a.getX() + a.getWidth() >= b.getX() && a.getX() + a.getWidth() <= b.getX() + b.getWidth()) ||
			(a.getX() <= b.getX() && a.getX() + a.getWidth() >= b.getX() + b.getWidth()))
		{
			return true;
		}
		return false;
(ich bin mir gerade nicht sicher, ob das der einfachste Weg ist, aber es sollte funktionieren)

Letztendlich werden in dem Code 3 Fälle unterschieden: der X-Punkt befindet sich innerhalb der anderen BB, der Punkt X+Breite befindet sich innerhalb der anderen BB oder die Punkte befinden sich einmal davor und einmal dahinter. (kann nur passieren, wenn die BB von b kleiner ist, als die von a)

Wenn du das für alle Achsen machst sollte es funktionieren. (Wenn ich mich jetzt nicht komplett vertan habe ;))
 

HimBromBeere

Top Contributor
Mein Vorredner hat völlig recht, du musst in allen drei Dimmensionen die Koordinaten aufeiandner überprüfen. Einen Körper mit Radius 1 halte ich designtechnisch auch für eher doof gewählt, für eine Kugel ist die Kollision nämlich sehr viel schwieriger zu errechnen als für einen Quader.

EDIT: Willst du jedoch unbedingt eine Kugel ereichen, ist die Darstellung in karthesichen Koordinaten aufgrund der komplizierten Rechnungen eher suboptimal, dann solltest du am ehesten auf Kugelkoordinaten umspringen... deren Erläuterung würde jedoch diesen Beitrag minimal sprengen :D und außerdem sind die für´s Rendern auch wider umständlich :D
 
Zuletzt bearbeitet:

tdc

Bekanntes Mitglied
EDIT: Willst du jedoch unbedingt eine Kugel ereichen, ist die Darstellung in karthesichen Koordinaten aufgrund der komplizierten Rechnungen eher suboptimal, dann solltest du am ehesten auf Kugelkoordinaten umspringen... deren Erläuterung würde jedoch diesen Beitrag minimal sprengen :D und außerdem sind die für´s Rendern auch wider umständlich :D

Nicht ganz... wenn es in der Szene NUR Kugeln gibt, ist die grobe Kollisionserkennung sogar noch einfacher: einfach Abstand zwischen Mittelpunkten der beiden Kugeln berechnen und schauen ob der Abstand <= Radius1 + Radius2 ist. Wenn ja, findet eine Kollision statt, ansonsten nicht. ;)
 

Lulumann6

Aktives Mitglied
hä wie kommst du auf kugelkoordinaten?
die kann man in die tonne kloppen sobald man mindestens eine kugel hat deren mittelpunkt nicht der nullpunkt des raums ist...
 

HimBromBeere

Top Contributor
Kann ja sein, dass das übergeornete Koordinatensystem eine Kugel (z,B, die Erde ist... auch wenn das erstmal nicht stimmt, aber das ist ein anderes Thema):)

Das mit dem Koordinatenursprung ist quatsch, wenn du zwei Körper auf Kollision testen willst, gehst du nicht erst über den Ursprung, sondern du wirst einfach eines der beiden als den Urpsrung definieren und dann den Abstand zum anderen berechnen. Das selbe machst du auch bei der Kugel...


Aber eine Analyse von Koorinatensystem will ich jetzt hier nicht anfangen, das scheint mir bei der Frage nicht zielführend zu sein...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Kollisionserkennung und -behandlung Spiele- und Multimedia-Programmierung 3
N Kollisionserkennung Spiele- und Multimedia-Programmierung 5
BraunBerry Java Game verbesserte Kollisionserkennung Spiele- und Multimedia-Programmierung 18
Cromewell JavaFX Kollisionserkennung Spiele- und Multimedia-Programmierung 6
S Jump 'n' Run-Spiel Kollisionserkennung Spiele- und Multimedia-Programmierung 3
S Kollisionserkennung in Slick2D... Mal wieder Spiele- und Multimedia-Programmierung 4
C Java Kollisionserkennung Spiele- und Multimedia-Programmierung 4
Androbin Pixel-genaue Kollisionserkennung Spiele- und Multimedia-Programmierung 5
Kenan89 Kollisionserkennung - Idee Spiele- und Multimedia-Programmierung 5
T Kollisionserkennung mit AABBs und Spielerobjekt Spiele- und Multimedia-Programmierung 4
R Java3D Kollisionserkennung und Schwerkraft Spiele- und Multimedia-Programmierung 17
Apo Kollisionserkennung bei Jump'n'Run Spiele- und Multimedia-Programmierung 69
B Kollisionserkennung bei gezeichneten Objekten Spiele- und Multimedia-Programmierung 2
M Kollisionserkennung optimieren Spiele- und Multimedia-Programmierung 7
M Kollisionserkennung Spiele- und Multimedia-Programmierung 4
E Probleme mit Kollisionserkennung ! Spiele- und Multimedia-Programmierung 2
P Kollisionserkennung Spiele- und Multimedia-Programmierung 3
R Kollisionserkennung funktioniert nicht Spiele- und Multimedia-Programmierung 3
C Kollisionserkennung Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen


Oben