# Kollisionsabfrage von einem Stein mit einem Ball



## thomas.g (3. Jan 2006)

Hi,

ich entwickle gerade ein kleines Spiel in dem es darum geht (mit Java2D) die Steine mit einem Ball der sich ständig bewegt zu treffen.

Das Problem:

Ich weiß zwar durch vergleichen zweier Rectangle Objekte mit "intersects" dass Ball und Stein kollidieren, allerdings muss ich wissen auf welchen der vier Seiten des Steines der Ball aufgetroffen ist um wieder im richtigen Winkel wegfliegen zu können.

Wie könnte ich also eine simple Methode schreiben die mir mithilfe von diesen Koordinaten:
Ball: X-Koordinate, Y-Koordinate, Breite, Höhe ist bekannt
Stein: das selbe ist bekannt
...... berechnet auf welcher Seite der Ball aufgetroffen ist?

thx, thomas


----------



## 0xdeadbeef (3. Jan 2006)

Du mußt doch die Richtung kennen, in die sich der Ball gerade bewegt. Z.B. wenn die X-Geschwindigkeitskomponente gerade positiv ist, kann der Stein nicht auf der rechten Seite getroffen worden sein.  Davon abgesehen kannst Du ja einfach die Koordinaten des Balls mit denen des Steins vergleichen. Zur Not den immer die alten Koordinaten vor der Kollision merken.


----------



## thomas.g (3. Jan 2006)

naja ich weiß mit zwei Variablen "incx" und "incy" (sind boolean) ob zu den X bzw Y Koordinaten des Balles die Geschwindigkeit addiert oder supprahiert werden soll.

Also weiß ich  wie der Ball fliegt. (hinunter oder hinauf - rechts oder links)

Ich hatte allerdings gerade einen Geistesblitz doch der könnte zu langsam arbeiten, naja ich erklärs mal.

Da der Stein ja vier Seiten hat, mach ich einfach für jede Seite ein Rectangel Objekt und schau wiederrum mit "Rectangle.intersects" ob der Ball eines dieser 4 Rectangles berührt, danach weiß ich, wo der Ball aufgetroffen ist

z.B. hier die Skizze, hier nur zwei Rectangle dargestellt


            --------- ___________ -------------
                        _                 _
            ----------___________-------------


die ___________ Linien sollten den Stein symbolisieren, die ------------ Linien die vier Rectangles der vier Seiten des Steines; wie gesagt, ich weiß nicht ob das Abfragen sehr schnell geht  aber es geht dafür dann 100%ig. Naja bis auf den Ecken, da könnte es Probleme geben ist aber meiner Meinung nach nicht von Bedeutung.

thx, thomas


----------



## gr33b (3. Jan 2006)

0xdeadbeef hat gesagt.:
			
		

> Zur Not den immer die alten Koordinaten vor der Kollision merken.



Es reicht ja schon ein Richtungsvektor wie du vorher beschrieben hast (mit X-Geschwindigkeitskomponente)


----------



## 0xdeadbeef (3. Jan 2006)

Wenn der Stein wirklich von allen Seiten getroffen werden kann, reicht der Vektor alleine nicht.
Denn ein nach links unten zeigender Vektor könnte den Stein sowohl oben als auch auf der linken Seite treffen. Das kann man dann nur durch die Position herausfinden.

Ansonsten halte ich "intersects" in diesem Fall für das Schießen mit Kanonen auf Spatzen. Speziell die zweite Lösung mit mehren intersects.


----------



## thomas.g (3. Jan 2006)

ich habe es jetzt mal mit den mehreren intersects versucht, und es geht wirklich gut, fast zu 100% stimmen nun alle Kollsionsabfragen und durch meine indirect-buffering methode (mit VolatileImages) geht das ganze auch ziemlich schnell, bin aber noch für kürzere Lösungen dankbar.

thx, thomas


----------

