Estou tentando criar um mecanismo de física 2D simples agora e estou com alguns problemas para descobrir como incorporar o impulso ao movimento de uma nave espacial.
Se estou me movendo em uma determinada direção a uma certa velocidade, atualmente posso atualizar facilmente a posição da minha nave (Posição + = Direção * Velocidade). No entanto, se o navio girar e eu recalcular a direção (com base no novo ângulo que o navio está enfrentando) e acelerar nessa direção, como posso levar o momento em consideração para alterar a "linha" que o navio viaja? Atualmente, o navio muda de direção instantaneamente e continua na velocidade atual nessa nova direção quando pressiono o botão de pressão. Quero que seja um movimento de rotação mais gradual, para dar a impressão de que o próprio navio tem alguma massa.
Se já existe um bom post sobre este tópico, peço desculpas, mas nada apareceu nas minhas pesquisas. Deixe-me saber se mais alguma informação é necessária, mas espero que alguém possa me dizer com facilidade como posso lançar velocidade de massa * na atualização do loop do jogo.
Respostas:
Parece que você tem Posição e Direção como vetores e Velocidade como escalar?
Nesse caso, apenas altere o Velocity para um vetor e faça algo assim:
A direção é um vetor de comprimento unitário que indica a direção do seu navio. Poder é a quantidade de impulso que você deseja adicionar (zero quando nenhuma aceleração é necessária) Tempo decorrido é o tempo entre o jogo e as chamadas de atualização para manter o movimento suave, mesmo quando a taxa de quadros está mudando
Se você quiser saber mais sobre isso, consulte Euler Integration
fonte
Em vez de manipular a velocidade diretamente, adicione outra variável: aceleração , que gradualmente altera suavemente a velocidade :
Da física clássica ( leis do movimento de Newton ):
Onde:
(Nota m é o único valor escalar; F, a, ve ep são todos vetores 2D ou 3D)
Além disso, existem duas direções:
Respondi a uma pergunta relacionada no StackOverflow: matemática do movimento da nave espacial 2D . Há algum código de amostra nessa resposta.
fonte