Kollision ermitteln Computerspiel

NeedHelp91

Grünschnabel
Hallo zusammen,

ich bin neu hier im Forum.
Ich hoffe ich bin hier im richtigen Themenbereich und hoffe Ihr könnt mir Helfen.

Ich programmiere ein 2D Spiel in Java mit Slick2D.
Nun bin ich an den Punkt, wo es notwendig ist eine genau Kollision zu bestimmen.
Zurzeit sieht meine Kollision so aus, das ich zwei Hitboxen habe die ich mit intersects abfrage.
Leider kann ich hier nicht sagen, wie der Spieler mit dem Erdblock der Map kollidiert ist.
Ich weiß nur, das er kollidiert ist, da ein boolean auf true gesetzt wird.
Daher habe ich es bis jetzt nur geschafft, das der Spieler nicht durch den Boden fliegt.
Wenn er aber von links oder rechts oder von unten in einen Block fliegt, dann geht er durch den Block durch.
Ich habe bereits gelesen, das man eine genau Kollisionsberechnung mit Hilfe von Vektoren durchführen kann.
Darauf hin habe ich mich etwas Schlau gemacht und weiß, das dies mit der Klasse: "Vector2f" gemacht werden kann.

Das heißt, das ich von dieser Klasse zwei Vektoren erzeuge mit:

Java:
Vector2f vektor1 = new Vector2f(x, y);
Vector2f vektor2 = new Vector2f(x, y);
(x, y) gibt an, wohin die Vektoren am anfang gezeichnet werden sollen.

Als nächstes muss ich die beiden Vektoren von einander Subtrahieren.

Java:
verktor1.sub(vektor2)

Nun wurde mir erklärt, das wenn das Ergebnis z.B. -1 ist, dann kollidierte der Player mit dem Erdblock entweder auf der rechten Seite auf der X-Achse oder von unten auf der y-Achse.
Bei einem positiven Wert hat eine Kollision von links oder von oben statt gefunden.
Weiters hieß es, das ich alles auf mein Koordinatensystem anpassen müsste.

Die Abfrage ob der Wert positiv oder negativ ist, kann ich ja mit einer einfachen if-Anweisung machen.
Nur wie weiß ich ob die Kollision auf der x oder Y-Achse stattgefunden hat?
Weiters weiß ich nicht was mit "anpassen auf mein Koordinatensystem" gemeint ist??
Hier komme ich nicht mehr weiter, da ich im Netz nichts finde.
Bevor ich das mit der Kollision nicht kann, kann ich auch nicht weitermachen mit der programmierung des Spiels.

Ich bitte euch um Hilfe.
Vielen DANK!!
 
Hallo,

also was willst du genau für eine Kollision machen , eine grobe oder z.B. eine PixelPerfektKollision? Denn es gibt da mehrere Möglichkeiten. Aus deinem Beitrag meine ich erkennen zu können ( weil du von Hitboxen sprichst) , dass du gerne eine Pixelperfektkollision machen möchtest. Wenn ja, schau Dir den folgenden Link an:
http://www.virtual-maxim.de/ und dort unter Tutorials findest du sowas, falls du das meinst.
Mehr kann ich Dir leider nicht sagen, weil die Kollisionsabfragen sich meist im jeweiligen Projekt, das man macht, zumeist von selbst ergeben.

Gruß Federhalter
 
Hallo NeedHelp91, und hallo Federhalter,
ich weiß jetzt gar nicht genau, an wen ich diesen Post schreibe. Es scheint zumindest so, als hätte sich NeedHelp91s Problem bereits längst erledigt, schließlich ist der Post 1,5 Jahre alt :oops:
Also an dich Federhalter, in Zukunft ruhig mal auf den Zeitstempel schauen ;)

Falls NeedHelp91 das jemals liest, oder ein anderer zufällig auf den Post stößt, möchte ich hier auch gerne noch meinen Senf dazugeben:

Vektoren sind etwas ganz anderes. Vektoren sind einfach ausgedrückt Punkte im Raum (mathematisch betrachtet eigentlich Pfeile), und wenn man zwei Vektoren subtrahiert kommt da wieder ein Vektor heraus, und definitiv kein Skalar (= normale Zahl)! v1 - v2 = v3

Es gibt für jede gängige Programmiersprache unzählige Bibliotheken für 3D- und insbesondere für 2D-Kollisionserkennung. Die Basics sind immer gleich (es werden Formen [aka Shapes] definiert, Kollisionsmasken vergeben, und dann Callback-Methoden eingerichtet falls eine Kollision stattfindet). Gerne können wir hier im Forum die grundlegende Mathematik und Programmlogik nochmal erläutern, allerdings sollte dann das Grundwissen was Vektoren/Geometrie angeht schon vorhanden sein.
Also an dich NeedHelp91: Falls die Sache immer noch ein aktuelles Thema für dich ist, bitte antworten.
Für alle anderen die hier durch Zufall oder die Suchfunktion landen: Einfach einen neuen Thread eröffnen, nette Menschen hier im Forum werden euch weiterhelfen.

Gruß Technipion
 
Zurück