Hallo,
für mein Spiel benötige ich eine Kollissionsabfrage für zwei Kreise. Dafür hab ich mir eine Methode geschrieben, doch irgendwie will das nicht so wie ich will. Ich berechne den Abstand zwischen den Mittelpunkten beider Kreise und schau dann ob dieser länger ist als beide Radien. Ist der Abstand kürzer sollten die eigentlichen x,y-Koordinaten nicht verändert werden. Allerdings "verhaken" sich die Kreise bei mir, sprich der der Abstand ist kürzer als die Radien, und der Kreis kann deswegen nicht mehr bewegt werden. Ich hoffe das Problem wird bei folgendem Code Ausschnitt klarer.
Die Methode zur Bestimmung ob sich die Kreise schneiden:
Die Methode, die die Koordinaten updatet:
Ich hoffe das Problem ist verständlich dargestellt. Vielleicht sitz ich ja auch nur auf dem Schlauch, aber ich verstehe einfach nicht, wieso "diff" negativ wird.
Bin für alle Anregungen und Kritik dankbar.
für mein Spiel benötige ich eine Kollissionsabfrage für zwei Kreise. Dafür hab ich mir eine Methode geschrieben, doch irgendwie will das nicht so wie ich will. Ich berechne den Abstand zwischen den Mittelpunkten beider Kreise und schau dann ob dieser länger ist als beide Radien. Ist der Abstand kürzer sollten die eigentlichen x,y-Koordinaten nicht verändert werden. Allerdings "verhaken" sich die Kreise bei mir, sprich der der Abstand ist kürzer als die Radien, und der Kreis kann deswegen nicht mehr bewegt werden. Ich hoffe das Problem wird bei folgendem Code Ausschnitt klarer.
Die Methode zur Bestimmung ob sich die Kreise schneiden:
Java:
public boolean intersection2Ovals(Ellipse2D.Double oval1, Ellipse2D.Double oval2) {
double r1 = oval1.getWidth() / 2.0;
double r2 = oval2.getWidth() / 2.0;
double x1 = oval1.getCenterX();
double y1 = oval1.getCenterY();
double x2 = oval2.getCenterX();
double y2 = oval2.getCenterY();
double a;
if (x1 < x2)
a = x2 - x1;
else
a = x1 - x2;
double b;
if (y1 < y2)
b = y2 - y1;
else
b = y1 - y2;
double c = Math.sqrt(a * a + b * b);
double diff = c - (r1 + r2);
Test.mess = "" + diff;
//System.out.println(diff + "/" + x + "/" + y);
if (diff <= 0.0)
return true;
return false;
}
Die Methode, die die Koordinaten updatet:
Java:
public void update(long timePassed) {
float xTemp = x, yTemp = y;
xTemp += vx * timePassed;
yTemp += vy * timePassed;
if (!intersection2Ovals(Test.tree.getOval(), this.getOval())) {
x = xTemp;
y = yTemp;
}
a.update(timePassed);
}
Ich hoffe das Problem ist verständlich dargestellt. Vielleicht sitz ich ja auch nur auf dem Schlauch, aber ich verstehe einfach nicht, wieso "diff" negativ wird.
Bin für alle Anregungen und Kritik dankbar.