Java Collisions

...komplette Frage anzeigen

2 Antworten

Hängt von der Art ab, wie bei dir der Player definiert ist. Falls es einfach eine Koordinate (x,y) ist, dann schaust du, ob diese Koord. im Rechteck ist (d.h. der y-Abstand vom Player.y zu Rectangle.Mittelpunkt < Rectangle.Höhe / 2 und der x-Abstand vom Player.x zu Rectangle.Mittelpunkt ist < Rectangle.Breite / 2).

Oder du definierst ein Rechteck durch (MinX,MinY), (MaxX, MaxY) und überprüfst dann, ob Player.X innerhalb von [MinX, MaxX] und Player.Y innerhalb von [MinY,MaxY] liegt.

xDIMandiIxD 08.06.2014, 13:22

Okay und was mache ich dann wenns player.x < maxX usw ist? :)

0
Delimiter 08.06.2014, 14:32
@xDIMandiIxD

Überleg mal was die Abfrage aussagt ;) Im Endeffekt prüft man nur nach ob der Punkt innerhalb des Rechtecks ist oder nicht

0
xDIMandiIxD 08.06.2014, 15:03
@Delimiter

Ja aber mein problem ist ja was ich dann machen soll um eine player wall collision zu haben

0

War mein größtes Problem bei der Spieleprogrammierung. Nach tagelangem Knobeln hab' ich einen ziemlich guten Weg gefunden, ist aber nicht der schnellste. Ich differenziere x- und y-Kollisionen. Außerdem benutze ich bei meinen Spielen immer gerne Geschwindigkeit, nicht nur blosse Erhöhung der x- und y-Werte.

public void xCollision(int otherObjectId) {
   Rectangle xRect = new Rectangle(x + xSpeed, y, width, height);
   while (collidesWith(otherObjectId, xRect)) {   //Prüft Kollision mithilfe der Rectangle.intersects()-Methode
      if (xSpeed < 0) xSpeed++;
      else if (xSpeed > 0) xSpeed--;
   }
   x += xSpeed;  //Wenn keine Kollision mehr vorliegt
}

Was das ganze im Grunde tut ist:

  1. Prüfen, ob es eine Kollision gäbe
  2. Wenn ja, dann die Geschwindigkeit um 1 verringern
  3. Wenn immernoch Kollision: Gehe zu Schritt 1
  4. Andernfalls: Füge der Position die Geschwindigkeit hinzu

Natürlich mache ich das dann auch nocht für die yCollision.

Was möchtest Du wissen?