Embora eu não tenha trabalhado com o mecanismo de física de balas especificamente, fiz algo muito semelhante em outro mecanismo de física. A maneira que resolvi foi definir a velocidade linear do corpo rígido em vez de traduzi-la diretamente. Movimentos e colisões foram então tratados automaticamente pela fase de atualização do mecanismo de física.
A partir da documentação , parece haver um btRigidBody::setLinearVelocity
método que você pode usar. Então, por exemplo, se você não deseja que nenhuma aceleração aconteça, apenas defina a velocidade linear para um valor apropriado sempre que o personagem estiver se movendo e defina-o novamente como (0,0,0) quando o personagem for interrompido (por exemplo, quando o jogador soltar a tecla).
Quanto a quais valores usar, a abordagem usual seria começar com a velocidade desejada do seu personagem (como um flutuador / escalar) e depois multiplicá-lo por um vetor normalizado que está apontando na direção que você deseja mover. Pelo que vejo, a btVector3
classe já possui métodos para tudo isso.
Como alternativa, você pode considerar tratar o personagem como um objeto físico completo e lidar com o movimento usando os métodos applyForce
ou applyImpulse
. Isso resultaria em uma aceleração do corpo, para que seus personagens tenham impulso e os resultados provavelmente serão mais agradáveis dessa maneira. Mas você precisa tomar algumas medidas extras, por exemplo, garantindo que a velocidade linear nunca exceda um determinado limite, apertando-a ou brincando com amortecimento / fricção. Portanto, será um pouco mais difícil de implementar e ajustar.
Experimente as duas abordagens e escolha a que se comporta mais próxima das suas necessidades.