Ich habe meine Spiel-Engine fertig programmiert und jetzt, da ich sie getestet habe, habe ich einige Grafikprobleme bemerkt.
Das große Problem ist, dass wenn ein Spieler versucht, gegen eine Wand zu drücken, sein Charakter dagegen "wackelt", wenn er ständig versucht, in den Raum der Wand einzudringen, und die Kollisionserkennung ihn ständig wieder nach draußen drückt.
Was ist der richtige Weg, um mit einer solchen Situation umzugehen?
Mein erster Instinkt war, wenn eine Bewegung in eine bestimmte Richtung eine Kollision verursacht, die Bewegung in diese Richtung zu deaktivieren, bis sich die Position der Entität geändert hat. Wenn ein Objekt auf eine Plattform fällt, deaktivieren Sie die Schwerkraft, bis sich das Objekt nicht mehr über einer Plattform befindet.
Gibt es eine bessere Möglichkeit, wiederholte Kollisionserkennungen zwischen denselben beiden Objekten im selben überlappenden Raum aufzulösen?
quelle
Dieses Problem tritt normalerweise auf, wenn der Code die Positionen festklemmt, bevor eine Kollision erkannt wird. Dh:
anstatt
Der Grund, warum es "wackelt", ist, dass die Prüfung erfolgt, nachdem der Charakter an einem "sicheren" Ort festgeklemmt wurde, aber dass sich der Charakter zum Zeitpunkt der Prüfung an einem nicht kollidierenden Ort befindet, damit die Engine dem Charakter erlaubt, fortzufahren Bewegen Sie sich, dann wird das Zeichen gezeichnet und im nächsten Frame, in dem die Prüfung fehlschlägt, wird Clamp aufgerufen, wodurch das Zeichen an den sicheren Ort zurückschnappt.
quelle
Ich hatte kürzlich das gleiche Problem und habe es folgendermaßen behoben:
Bewegen Sie das Objekt und suchen Sie nach einer Kollision. Wenn eine Kollision gefunden wird, platzieren Sie das Objekt außerhalb des kollidierenden Objekts. zeichne das Objekt.
Der Spieler könnte ohne Wackeln gegen die Wand rennen, da er vor dem Ziehen an der Seite des Objekts platziert wird.
quelle
Mithilfe der Vektor- / Ebenenmathematik können Sie den genauen Kollisionspunkt mit der Wand berechnen, der im nächsten Frame auftreten wird. Dies setzt voraus, dass Ihr Charakter eine Geschwindigkeit hat, mit der Sie den Bewegungsvektor berechnen können, der im nächsten Frame auftreten wird. Nachdem Sie den Kollisionspunkt gefunden haben, können Sie den Gleitvektor berechnen, der Ihren Charakter entlang der Wand bewegt. Dieser Vektor kann tatsächlich mit einer anderen Wand kollidieren.
Zurück zu Ihrer Frage, sollten Sie die genaue Position der Kollision berechnen, an der sich Ihr Charakter befinden sollte und was dann tatsächlich passieren sollte. Wenn dies eine Wand und ihr FPS-Spiel ist, lassen Sie den Charakter daran entlang gleiten.
quelle