Kollision Polygon und Rechteck

Oliundmarlo

Neues Mitglied
Hallo liebe User,
da ich gerade Semesterferien habe arbeite ich an einem kleinen Spielchen.
In der Mitte des Spielfeldes befindet sich ein Panzer. Mit den Tasten A und D lässt er sich rotieren. Mit W und S fährt er in Richtung des Vektors. Genau genommen verschiebt sich der Hintergrund. Der Panzer ist also immer im Zentrum.

Um Kollisionen zu erkennen habe ich ein Polygon um den Panzer gelegt. Über die Rotationsmatrix dreht sich das Polygon entsprechend um den Mittelpunkt des Panzers. Das klappt alles einwandfrei. :D

panzer1.png

Ich habe nun Hindernisse(Häuser), als Rectangle in die Spielwelt eingefügt. Fährt der Panzer beispielsweise von unten auf ein Haus zu soll das drücken der W-Taste keine Verschiebung mehr in
(-y)-Richtung zulassen. Fährt er Rückwärts mit der S-Taste gegen das Haus soll natürlich auch die
(-y)-Verschiebung blockiert werden. Dieses Problem habe ich über den aktuellen Winkel des Panzers gelöst.
Mein Problem jedoch ist, dass sich der Panzer oft verhängt. Beispielsweise an den Ecken eines Hauses. Hat jemand eine Idee wie ich dieses Problem lösen kann? ;(

Hier mal ein bisschen Quellcode:

Java:
if(kol != null){
				
				if(maxY > kol.getMinY() && minY < kol.getMinY() && maxX > kol.getMinX() && minX < kol.getMaxX()){
					if(tankRotation >= 181 && tankRotation <= 359){
						System.out.println("W");
						wBlocked = true;
					}else if(tankRotation >= 1 && tankRotation <= 179){
						System.out.println("S");
						sBlocked = true;
					}else{
						//Keine Blockade
					}
					
				}else if(minY < kol.getMaxY() && maxY > kol.getMaxY() && minX < kol.getMaxX() && maxX > kol.getMinX()){
					if(tankRotation >= 1 && tankRotation <= 179){
						System.out.println("W");
						wBlocked = true;
					}else if(tankRotation >= 181 && tankRotation <= 359){
						System.out.println("S");
						sBlocked = true;
					}else{
						//Kein Block
					}
				}else if(minX < kol.getMaxX() && maxX > kol.getMaxX() && maxY > kol.getMinY() && minY < kol.getMaxY()){
					if(tankRotation >= 91 && tankRotation <= 269){
						System.out.println("W");
						wBlocked = true;
					}
					else if(tankRotation >= 271 && tankRotation <= 359 || tankRotation >= 1 && tankRotation <= 89){
						System.out.println("S");
						sBlocked = true;
					}else{
						//Kein Block
					}
				}else if(maxX > kol.getMinX() && minX < kol.getMinX() && maxY > kol.getMinY() && minY < kol.getMaxY()){
					if(tankRotation >= 271 && tankRotation <= 359 || tankRotation >= 1 && tankRotation <= 89){
						System.out.println("W");
						wBlocked = true;
					}
					else if(tankRotation >= 91 && tankRotation <= 269){
						System.out.println("S");
						sBlocked = true;
					}else{
						//Kein Block
						wBlocked = false;
						sBlocked = false;
					}
				}
				
			}
			else{
				//Kein Block
				wBlocked = false;
				sBlocked = false;
			}

Bei "Kol" handelt es sich um das Kollidierte Rectangle Haus.
minX, maxX, minY und maxY sind die Extremwerte des Polygons vom Panzer!
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Ich denke mal, dass du eine Geschwindigkeit größer 1 verwendest. Dann liegt es daran, dass du durch das Haus hindurch glitchst und dann dein Programm erst merkt, dass da etwas nicht stimmt.

Dazu gibt es zwei Möglichkeiten:
  1. Du zerlegst die Bewegung in kleine Bewegungen und testest immer vor einer Bewegung, ob sich das Polygon und der Rectangle überschneiden (Polygon#intersect(Rectangle2D)).
  2. Du testest vor der Bewegung um z.B. 7 Längeneinheiten, ob du kollidieren würdest und dann ziehst du eine Linie von dem Panzer in Richtung des Vektors und tastest dich an das Haus heran (du springst die Hälfte des Weges, wenn du kollidierst, springst du die Hälfte der Hälfte zurück und testest erneut. Wenn du nicht kollidierst, andersrum)

Welche du verwendest, bleibt dir überlassen. Die erste ist einfacher zu implementieren und die Zweite ist performanter.
 

Oliundmarlo

Neues Mitglied
Ok hab das Problem jetzt doch selbsständig gelöst. Hat mich nen ganzen Tag gekostet aber es hat sich gelohnt. Funktioniert jetzt wunderbar. Trotzdem danke für den Ratschlag. Werde ich beim nächsten mal vielleicht so umsetzen.
;) ;);)
 
Ä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
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
S Kollision Kreis Rechteck Spiele- und Multimedia-Programmierung 8
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
S Polygon Kollisionsabfrage Spiele- und Multimedia-Programmierung 2
S Kollisionsabfrage zwischen Rechteck und Polygon Spiele- und Multimedia-Programmierung 1
S 3D-Polygon Spiele- und Multimedia-Programmierung 5
S Problem mit 3d-Polygon Spiele- und Multimedia-Programmierung 2
R JOGL polygon smooth Spiele- und Multimedia-Programmierung 20
X Polygon in Graphics2D löschen Spiele- und Multimedia-Programmierung 4
R Polygon um double x/y - Werte verschieben Spiele- und Multimedia-Programmierung 2
G Eine Art Polygon Spiele- und Multimedia-Programmierung 5
S Polygon bewegt sich nach mehreren aufrufen immer schneller Spiele- und Multimedia-Programmierung 3
G Polygon mittels der Klasse PathIterator Koordinateneckpunkte Spiele- und Multimedia-Programmierung 1
chik Wie arbeitet die polygon.contains Methode in Java Spiele- und Multimedia-Programmierung 4
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