Kollision Kreis Rechteck

Samurai

Mitglied
Hey,
ich hoffe dies ist hier die richtige Kategorie, sonst bitte verschieben.

Mein Problem: ich schreibe an einer Art Breakoutklon, sprich man hat dieses "Paddel" und muss mit einem Ball die Blöcke zerstören. Gibt es zwar schon 1000 mal aber ist eine gute Übung für 2d Spiele. (Btw kann hier jemand gute Anleitungen für 2d Spiele angeben?).

Mein Problem ist jetzt die Korrekte Kollisionserkennung zwischen Ball und Block. Theoretisch kann man dies ja einfach machen indem ein Quadrat um den Ball annimmt und abfragt ob dieses den Quader des Block schneidet (intersect oder so). Das führt aber bei einem runden Ball zu komischem Verhalten.

Gibt es also eine Funktion um einen Kreis mit einen Rechteck kollidieren zu lassen? Und wie bekomme ich dann raus wo die sich getroffen haben.
Ich hab das momentan folgender Maßen gemacht:

es werden 8 Punkte auf dem Kreis berechnet. Das sind diese (x = Punkt)

00x00
0x0x0
x000x
0x0x0
00x00

Dann schau ich mit .getrect().contains() nach ob einer davon im Block liegt. Wenn ja wird halt die Richtung geändert. Dies funktioniert aber nicht gerade perfekt. Daher die Frage wie mache ich das besser?
 

Marco13

Top Contributor
Spontan...

Wenn der Mittelpunkt des Balles in einem der mit ! markierten bereiche liegt
Code:
       .    .
       .    .
       !!!!!!
       !!!!!!
...!!!!BBBBBB!!!!...
...!!!!BBBBBB!!!!...
       !!!!!!
       !!!!!!
       .    .
       .    .
dann bestimmt man den Abstand des Mittelpunktes zur jeweiligen Seite, und wenn der <radius ist, prallt er an der entsprechenden Seite ab, mit Einfallswinkel=Ausfallswinkel, außer wenn du noch Fancy was mit Anschneiden machen willst. (Bei einigen Breakouts wird der Schläger als Block dargestellt, hat aber afair ein Verhalten, das eher an eine flache "Pyramide" erinnert.)

Wenn der Mittelpunkt nicht in diesen Bereichen liegt, dann liegt er an einer "Ecke" (also den leeren Eck-Bereichen oben). Dann betrachtet man den Abstand vom Mittelpunkt zur Ecke, und wenn der kleiner als der Radius ist, prallt der Ball an der Ecke ab, dann müßte (statisch, im einfachsten Fall) einfallswinkel=ausfallswinkel in bezug auf die Ebene gelten, deren Normale die Strecke Kresimittelpunkt-Ecke gegeben ist.
 

Samurai

Mitglied
Ok das hört sich etwas einfacher an! Gibt es eine vorgefertige Funktion für den Abstand? Sonst muss ich da nochmal selber was zusammenbasteln.
 

Samurai

Mitglied
Dumme frage aber das ist doch nur eine Superklasse sozusagen stimmts? Daher muss ihc mit konkreten Unterklassen arbeiten.
Rect gibts ja zum Beispiel, aber als ich sowas in der Art:
Java:
Line linie;
linie = new Line()

versucht habe kamen nur Fehler. Gibt es da was passendes?
 

Marco13

Top Contributor
Line2D.Double line = new Line2D.Double(...);
oder (besser?)
Line2D line = new Line2D.Double(...);
Ich find' diese Unterklassen etwas merkwürdig... aber wohl eine angemessene Lösung für das Problem.
 

StrikeTom

Bekanntes Mitglied
Den abstand zwischen zwei punkten berechnet man so:
wurzel von ((punkt1x-punkt2x) zum quadrat + (punkt1y-punkt2y)zum quadrat)
In java aus gedrückt:
Java:
int abstand = Math.sqrt((Math.pow(x1,2)-Math.pow(x2,2))+(Math.pow(y1,2)-Math.pow(y2,2))
 

Grey_M

Aktives Mitglied
Also ich hatte mal sowas ämliches.

Für die Kollisionserkennung habe ich mir dann neben dem Rechteck das ich zeichne, jede Kante als Linie gemerkt.
-lineTop
-LineBottom
-lineLeft
-LineRight

Irgendwo, ich weis gerade nicht wo, gibt es eine Methode die schaut ob eine Linie einen Kreis schneidet. Bei meiner Logikprüfung habe ich dann geschaut in welche Richtung sich die Kugel bewegt.
Bewegt sie sich nach oben, so muss ich nur die lineBottom prüfen. Kommt die Kugel von rechts, so muss ich nur lineRight prüfen.
Entsprechend gibt es dann die Kombinationen. Wenn die Kugel von rechts unten kommt, dann prüfen linteBottom und lineRight.

Hat soweit wunderbar funktioniert. Falls interesse besteht kann ich meinen "proof of concept" bereit stellen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Kollision Spiele- und Multimedia-Programmierung 5
A Kollision funktioniert nicht richtig bei zu schneller Geschwindigkeit des Spielers Spiele- und Multimedia-Programmierung 0
N Kollision von zwei ImageIcons Spiele- und Multimedia-Programmierung 8
D Kollision funktioniert unten aber nicht oben Spiele- und Multimedia-Programmierung 4
J Kollision (libgdx) Spiele- und Multimedia-Programmierung 2
S Kollision Spiele- und Multimedia-Programmierung 2
J Kollision genau erkennen mit intersects Spiele- und Multimedia-Programmierung 27
K a* kollision der einheiten Spiele- und Multimedia-Programmierung 3
S Probleme bei Breakout - Brick kollision Spiele- und Multimedia-Programmierung 2
F Rechteck Kollision Spiele- und Multimedia-Programmierung 10
H 2- D Kollision Spiele- und Multimedia-Programmierung 14
C Zeldaklon Problem mit Wand-Kollision Spiele- und Multimedia-Programmierung 8
O Kollision Polygon und Rechteck Spiele- und Multimedia-Programmierung 2
S Pacman Kollision von Münzen und Mauern Spiele- und Multimedia-Programmierung 11
P Gridpane Kollision Spiele- und Multimedia-Programmierung 3
Androbin Kollision zwischen Raster und Nicht-Raster Spiele- und Multimedia-Programmierung 2
L Kollision soll nur an oberer Seite (Breite) möglich sein Spiele- und Multimedia-Programmierung 6
Hercules Kisten Kollision Spiele- und Multimedia-Programmierung 2
S 3D-Kollision mit zwei ArrayLists Spiele- und Multimedia-Programmierung 7
T Pixelgenaue Kollision Spiele- und Multimedia-Programmierung 5
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
S Kollision tile-based 2D Plattformer Spiele- und Multimedia-Programmierung 2
D Greenfoot Kollision Spiele- und Multimedia-Programmierung 5
D Kollision verhindern Spiele- und Multimedia-Programmierung 2
R Frage zur Kollision Spiele- und Multimedia-Programmierung 5
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Kr0e Kollision zweier Kugeln... Wo ist Newton ?? Spiele- und Multimedia-Programmierung 9
C Kollision zwischen 2 Kreisen Spiele- und Multimedia-Programmierung 3
Helgon Kollision von jeder Seite des Blocks Spiele- und Multimedia-Programmierung 3
Fab1 Kollision die 100ste Spiele- und Multimedia-Programmierung 5
D Jump'n'run Kollision bei Blöcken Spiele- und Multimedia-Programmierung 10
P PingPong Spiel - Kollision Spiele- und Multimedia-Programmierung 2
C Bitmaske und Kollision Spiele- und Multimedia-Programmierung 2
J Spielprogrammierung mit bewegung und kollision Spiele- und Multimedia-Programmierung 24
aze Java3D: Gegenstände aufeinander zubewegen ohne Kollision Spiele- und Multimedia-Programmierung 4
baddestpoet pixelgenaue Kollision Spiele- und Multimedia-Programmierung 4
S Kollision in 2D Spiele- und Multimedia-Programmierung 12
B Gedrehte Rechtecke Kollision Spiele- und Multimedia-Programmierung 4
J Kollision mit Block (Wand) Spiele- und Multimedia-Programmierung 11
C Kollision in Java3D Spiele- und Multimedia-Programmierung 4
J Kollision von Objekten Spiele- und Multimedia-Programmierung 7
M Asteroids Clone: Kollision zwischen Schuss und Feind Spiele- und Multimedia-Programmierung 13
F Bewegung/Kollision von Objekten auf Tastendruck Spiele- und Multimedia-Programmierung 6
Z Kollision Spiele- und Multimedia-Programmierung 3
F Kollision für Arkanoid Spiele- und Multimedia-Programmierung 2
N Kollision abfragen Spiele- und Multimedia-Programmierung 3
K Sprites / Kollision Spiele- und Multimedia-Programmierung 3
S Jump'n'Run: Probleme mit Kollision Spiele- und Multimedia-Programmierung 13
L Kreis auf Linie platzieren (-> Koordinatentransformation?) Spiele- und Multimedia-Programmierung 7
M Kreis abfahren Spiele- und Multimedia-Programmierung 20
A Kreis teilweise füllen Spiele- und Multimedia-Programmierung 6
H Kreis zeichnen mittels Schleife & drawLine Spiele- und Multimedia-Programmierung 4
S Kollisionsabfrage zwischen Rechteck und Polygon Spiele- und Multimedia-Programmierung 1
S LWJGL Rechteck wird nicht gezeichnet Spiele- und Multimedia-Programmierung 6
M Rechteck erkennung innerhalb einer Matix Spiele- und Multimedia-Programmierung 4
Q Rechteck in BIld suchen Spiele- und Multimedia-Programmierung 8
P Rechteck drehen Spiele- und Multimedia-Programmierung 3
P Rechteck rotieren und frontal anzeigen Spiele- und Multimedia-Programmierung 2
M Bilder verzerren [Rechteck -> Trapez] Spiele- und Multimedia-Programmierung 4
T Rechteck "ziehen"!? Spiele- und Multimedia-Programmierung 1
L ein Rechteck zeichnen Spiele- und Multimedia-Programmierung 6

Ähnliche Java Themen

Neue Themen


Oben