Chociaż nie pracowałem specjalnie z silnikiem fizyki pocisków, zrobiłem coś bardzo podobnego w innym silniku fizyki. Sposób, w jaki to rozwiązałem, polegał na ustawieniu prędkości liniowej ciała sztywnego zamiast bezpośredniego tłumaczenia. Ruch i kolizje były następnie automatycznie obsługiwane przez fazę aktualizacji silnika fizyki.
Z dokumentacji wynika, że istnieje btRigidBody::setLinearVelocity
metoda, której można użyć. Na przykład, jeśli nie chcesz, aby miały miejsce żadne przyspieszenia, po prostu ustaw prędkość liniową na odpowiednią wartość za każdym razem, gdy postać się porusza, i ustaw ją z powrotem na (0,0,0), kiedy postać ma się zatrzymać (tj. kiedy gracz zwolni klawisz).
Jeśli chodzi o to, jakich wartości użyć, typowym podejściem byłoby rozpoczęcie od pożądanej prędkości twojej postaci (jako liczby zmiennoprzecinkowej / skalarnej), a następnie pomnożenie jej przez znormalizowany wektor, który wskazuje w kierunku, w którym chcesz się poruszać. Z tego, co widzę, btVector3
klasa ma już metody do tego wszystkiego.
Alternatywnie możesz rozważyć potraktowanie postaci jako kompletnego obiektu fizyki i obsługę ruchu za pomocą metod applyForce
lub applyImpulse
. Spowodowałoby to przyspieszenie ciała, więc twoje postacie będą miały pęd, a wyniki prawdopodobnie będą wyglądać ładniej w ten sposób. Ale musisz podjąć dodatkowe środki, na przykład upewniając się, że prędkość liniowa nigdy nie przekracza określonego limitu, albo poprzez zaciskanie go, albo zabawę z tłumieniem / tarciem. Będzie to więc trudniejsze do wdrożenia i dokładniejszego.
Eksperymentuj z obiema metodami, a następnie wybierz tę, która zachowuje się najbliżej twoich potrzeb.