Obwohl ich nicht speziell mit der Bullet-Physik-Engine gearbeitet habe, habe ich in einer anderen Physik-Engine etwas sehr Ähnliches gemacht. Die Art und Weise, wie ich es gelöst habe, bestand darin, die Lineargeschwindigkeit des starren Körpers einzustellen, anstatt sie direkt zu übersetzen. Bewegungen und Kollisionen wurden dann automatisch von der Aktualisierungsphase der Physik-Engine behandelt.
Aus der Dokumentation geht hervorbtRigidBody::setLinearVelocity
, dass Sie eine Methode verwenden können. Wenn Sie beispielsweise keine Beschleunigungen wünschen, setzen Sie die Lineargeschwindigkeit einfach auf einen geeigneten Wert, wenn sich das Zeichen bewegt, und setzen Sie sie auf (0,0,0) zurück, wenn das Zeichen anhalten soll (dh wenn der Spieler den Schlüssel loslässt).
Was die zu verwendenden Werte betrifft, besteht der übliche Ansatz darin, mit der gewünschten Geschwindigkeit Ihres Charakters (als Float / Skalar) zu beginnen und diese dann mit einem normalisierten Vektor zu multiplizieren, der in die Richtung zeigt, in die Sie sich bewegen möchten. Soweit ich sehen kann, verfügt die btVector3
Klasse bereits über Methoden für all dies.
Alternativ können Sie den Charakter als vollständiges Physikobjekt behandeln und die Bewegung entweder mit der Methode applyForce
oder mit der applyImpulse
Methode behandeln. Dies würde zu einer Körperbeschleunigung führen, sodass Ihre Charaktere Schwung haben und die Ergebnisse auf diese Weise wahrscheinlich besser aussehen. Sie müssen jedoch einige zusätzliche Maßnahmen ergreifen, indem Sie beispielsweise sicherstellen, dass die Lineargeschwindigkeit niemals einen bestimmten Grenzwert überschreitet, indem Sie sie entweder festklemmen oder mit Dämpfung / Reibung herumspielen. Es wird also etwas schwieriger zu implementieren und zu optimieren sein.
Experimentieren Sie mit beiden Ansätzen und wählen Sie dann den aus, der Ihren Anforderungen am nächsten kommt.