2d streetfighter Spiel Java?
Hallo, meine Freunde und ich( Informatik LK) müssen ein streetfighter Game entwerfen und müssen natürlich auch hitboxen und collison detection machen. Kann jemand uns dabei helfen...müssen das ganze in Java machen. Wie programmiert man hitboxen.?btw wir haben schon Spieler und eine Stage...wir müssen nur schaffen, das sich die beiden Spieler nicht durcheinander laufen können!jemand ne Ahnung
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
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.
Aber wie kriegen wir das in Java hin, das das Programm weiß wodrauf die hitbox bleiben muss ?
Jedes "Ding" in eurem Spiel ist ja eine Instanz von der Klasse "GameObject" oder etwas vergleichbarem, mit Aussehen, Position, Größe usw., oder?
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...:)
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...
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...
Ich bin mir wie gesagt, nicht sicher, was du meinst. Um dir da irgendwie weiter helfen zu können, müsst eich euren vorhandenen Code kennen. Schau doch sonst z.b. mal hier: https://github.com/edgelord314/salty-engine/blob/master/src/main/java/de/edgelord/saltyengine/gameobject/GameObject.java
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
Da muss euch der Lehrer beraten, das ist schließlich seine Aufgabe und nicht unsere.
Schätze der Lehrer weiß das auch nicht, die haben ja Game programmieren net im Studium
Aber als Lehrer muss man das was man von den Schülern erwartet doch auch selber können
Lasst euch das doch mal von eurem Tutor erklären.
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