continuous collision detection ?

BDG

Aktives Mitglied
Hey Leute.
ich bin gerade dabei ein Jump and Run Spiel in Java zu schreiben.
Und nun kommt folgendes problem auf. (kleines Beispiel :)
Die Figur wird beim fallen + 10 y gemacht...
Der Boden ist auf 400.
Die aktuelle Spieler position ist 398.
Wenn ich nun prüfe, ob die Spielerposition kleiner gleich 400 ist, und dann den Fall stoppe, dann kann es, wie in diesem Beispiel ja eintreten, dass die Spielerposition dann 408 ist.
Weil er der Spieler den Boden nur ganz fast berührte und das weitergelaufen ist, und dann - 10 gerechnet wurde, was wieder weit ober 400 ist !

Ich meine ich hatte das Problem mal in c#, und mir wurde gesagt, dazu brauche ich eine CCD.
Aber wie mache ich sowas ?

Vielen Dank für eure Hilfe ^^
 

Kr0e

Gesperrter Benutzer
1er schritte dazu addieren und prüfen?

In heutiger Zeit könnte sowas aufgrund von enormer Rechenleistung sogar klappen, konzeptionell ist dies aber eine sehr schlechte Idee.


CCD ist generell eine schicke Sache. Wobei die Impl. nicht allzu einfahc ist und 2. immer noch ineffizienter ist, als diskrete Kollisiondetektion. (Diskret ist mehr oder weniger das, was du machst).


Diskrete Kollisionserkennung klappt aber eigentlcih etwas anders als du es hast. Wenn es zu einer Kollision kommt, dann wird in geteilt-durch-2 Schritten wieder rückwerts gegangen, bis es keine Kollision mehr ist. So wird es bei 3D Programmen gemacht. Du hast jetzt natürlich einen einfachen Sonderfall (Nämlich 2D).

ICh würde einfach schauen, dass du deine Figur einfach nicht unter 400 Pixel kommt. Sprich bei der Gravitation iwas einbauen, s.d. falls Höhe < Geschwindigkeit dann Geschwindigkeit = Höhe. Sodass dein Spieler im Idealfall GENAU auf dem Boden ist.



Ansonsten gibt es natürlich wie sonst auch immer noch ne Alternative. Du könntestn Box2D verwenden. Eine schlanke 2D Physikengine die gut mit Java funktioniert. Dann könntest du direkt in dein Spiel direkt simple Physik einbauen und hast 2 Fliegen mit einer Klappe... Just saying^^
Hier der Link JBox2D: A Java Physics Engine
 
S

SlaterB

Gast
s.d. falls Höhe < Geschwindigkeit dann Geschwindigkeit = Höhe. Sodass dein Spieler im Idealfall GENAU auf dem Boden ist.
wie geht denn das in Einheiten? ;)
ja also gerade bei festen Hindernissen kann man doch das bewegte Element bei einer Kollision recht gut genau an den Rand setzen, ob Boden, Wand oder Decke,
 

Marco13

Top Contributor
Ja, CCD kann aufwändig sein. In diesem Fall... geht es vielleicht sogar noch, weil es einer der einfachsten denkbaren Fälle ist: Der Boden bewegt sich ja nicht. Man muss ja nur den Schnittpukt zwischen zwei Liniensegmenten berechnen. Nämlich zwischen dem Bewegungsvektor des "Fußpunktes" der Spielfigur (oder der beiden Fußpunkte), und der "Bodenlinie". Wenn man diesen Schnittpunkt hat, entspricht das ja genau dem Kollisionszeitpunkt. DANN kommt die Kollisionsantwort, wo auch schon viel drüber geschrieben wurde (und zusammengefasst: Es ist ALLES falsch ;) ), aber die in diesem Fall daraus bestehen könnte, dass die Figur einfach auf den entsprechenden Kollisionspunkt gesetzt wird.

(BTW: In meiner Diplomarbeit durfte ich das für Kollisionen in 3D zwischen bewegten Punkten und bewegten Dreiecken, bzw. Paare von bewegten Kanten auseinanderklamüsern... das ist etwas aufwändiger ... ;))
 

Ähnliche Java Themen

Neue Themen


Oben