2d streetfighter Spiel Java?

3 Antworten

Es gibt in Java mehrere Möglichkeiten, Hitboxen zu realisieren: (Positionen von Rechtecken ist immer deren linke obere Ecke, die von Kreisen immer deren Mittelpunkt)

  • Rechteck zu Rechteck

Hierfür muss jedes Objekt in dem Spiel eine position (x und y) und Abmessungen (w und h) haben. Mit einer einfachen Formel kann man dann ausrechnen, ob die beiden Objekte sich berühren:

boolean collision = 
x2 + w2 > x1 
&& y2 + h2 > y1 
&& x2 < x1 + w 
&& y2 < y1 + h
  • Kreis zu Kreis

Hierfür muss nur der Radius der Hitbox (r) und die position des Mittelpunktes (x und y) bekannt sein, um folgende Formel anzuwenden:

double distance = Math.hypot(Math.abs(y2 - y1), Math.abs(x2 - x1));
boolean collision = distance <= r1 / 2d + r2 / 2d;
  • Kreis zu Rechteck

Hierfür muss ebenfalls der radius und position (r, x1, y1) des Kreises und die Position und Abmessungen des Rechtecks (x2, y2, w, h) bekannt sein, für folgende Formel (clamp gibt es in Java nicht, muss selber programmiert werden, gibt den ersten gegebenen Wert als Zahl zwischen den beiden anderen gegebene Zahlen zurück, einfach googeln):

double closestX = clamp(x1, x2, x2 + w);
double closestY = clamp(y1, y2, y2 + w);

boolean collision = Math.hypot(Math.abs(y1 - y2), Math.abs(x1 - x2)) < getWidth() / 2d;
  • Polygon zu Polygon

Das ist das schwierigste und für den Computer am Aufwendigste. Dafür brauchst du zwei `Shape` Objekte (java.awt.Shape), und kannst wie folgt bestimmen, ob sie sich berühren:

Area area1 = new Area(shape1);
// ändert area1 zu einer Area, die genau das beinhaltet, das shape1 und shape gemeinsam haben, also die Area, in der sie sich überschneiden
area1.intersect(new Area(shape2));

boolean collision = !area1.isEmpty();

Ich hoffe, dir damit helfen zu können. Für weitere Infos stehe ich gerne zur Verfügung, habe mit obigen Methode eine game engine entwickelt, bei der man sich auch mal reinlesen könnte, um Collision Detection usw. zu lernen (Salty Engine - https://www.github.com/edgelord314/salty-engine).

Mit freundlichen Grüßen

Malte

Woher ich das weiß:Hobby

Julian200702 
Fragesteller
 20.02.2020, 22:18

Danke für die Antwort, wie realisiert man das dann im Spiel, das die hitbox immer auf dem Player ist und so? Und wie verbindet man hitbox und collisin detection ?

LG

0
malte314  21.02.2020, 15:23
@Julian200702

Wenn du den Spieler bewegst, bewegst du die Hitbox einfach mit ihm. Und jede loop muss du dann halt zwischen allen Hitboxen auf collision checken.

0
Julian200702 
Fragesteller
 21.02.2020, 18:26
@malte314

Aber wie kriegen wir das in Java hin, das das Programm weiß wodrauf die hitbox bleiben muss ?

0
malte314  23.02.2020, 16:27
@Julian200702

Jedes "Ding" in eurem Spiel ist ja eine Instanz von der Klasse "GameObject" oder etwas vergleichbarem, mit Aussehen, Position, Größe usw., oder?

0
Julian200702 
Fragesteller
 24.02.2020, 08:34
@malte314

Ah okay und dann muss man einfach den Code oben verwenden, ist das Alles was man braucht um so ein rectangle als hitbox zu verwirklichen.....?und wie sieht’s aus mit collison detection. Also wir haben schon Code für collison detection und verstehen das auch in Maßen, aber was und zu schaffen macht sind die transparenten hitboxen auf den Spielern und allgemein die hitbox dir transparent aufliegt danke btw...:)

0
malte314  24.02.2020, 10:36
@Julian200702

das mit den trabsparenten hitboxen verstehe ich nicht ganz... :thinking:

Vielleicht kannst du die entsprechenden Zeilen mal auf pastebin posten und den link hier reinschicken oder so...

0
Julian200702 
Fragesteller
 24.02.2020, 12:10
@malte314

Danke aufjedenfall....sitzen gerade dran, die ganzen Positionen und so auf die hitbox zu übertragen....hast du da ne Art Code für oder so...also quasi wie oben mit den beiden rectangel aber nur als Code...

0
Julian200702 
Fragesteller
 26.02.2020, 09:27
@malte314

Danke erstmal, also wir haben schon die Player die als Rechtecke da gestellt werden, wir müssen nur sicherstellen das sie nicht durch einwandern durchlaufen können....also ne hitbox, die dem rectangle sagt das es weiter gehen kann und von dem anderen rectangle abgeblockt wird....und dafür brauchen wir halt ne Idee für die hitbox und automatisch halt ne collison detection

0

Da muss euch der Lehrer beraten, das ist schließlich seine Aufgabe und nicht unsere.


Julian200702 
Fragesteller
 26.02.2020, 17:37

Schätze der Lehrer weiß das auch nicht, die haben ja Game programmieren net im Studium

1

Lasst euch das doch mal von eurem Tutor erklären.

Woher ich das weiß:Hobby – Zocke seit den 90ern