Estoy intentando crear un motor de física 2D simple en este momento, y me encuentro con algunos problemas para descubrir cómo incorporar el impulso en el movimiento de una nave espacial.
Si me estoy moviendo en una dirección determinada a una velocidad determinada, actualmente puedo actualizar fácilmente la posición de mi nave (Posición + = Dirección * Velocidad). Sin embargo, si el barco gira en absoluto, y recalculo la dirección (en función del nuevo ángulo que enfrenta el barco) y acelero en esa dirección, ¿cómo puedo tener en cuenta el impulso para alterar la "línea" que viaja el barco? Actualmente, la nave cambia de dirección instantáneamente y continúa a su velocidad actual en esa nueva dirección cuando presiono el botón de empuje. Quiero que sea un movimiento de giro más gradual para dar la impresión de que el barco en sí tiene algo de masa.
Si ya hay una buena publicación sobre este tema, me disculpo, pero no apareció nada en mis búsquedas. Avíseme si necesita más información, pero espero que alguien pueda decirme fácilmente cómo puedo agregar velocidad en masa * a la actualización de mi ciclo de juego.
Respuestas:
¿Parece que tienes Posición y Dirección como vectores y Velocidad como escalar?
Si es así, simplemente cambie la Velocidad en un vector también y luego haga algo como esto:
La dirección es un vector de longitud unitaria que da el rumbo de su nave. Poder es la cantidad de empuje que desea agregar (Cero cuando no se necesita aceleración) ElapsedTime es el tiempo entre las llamadas de actualización de su juego para mantener el movimiento suave incluso cuando su velocidad de cuadros está cambiando
Si desea saber más al respecto, puede buscar la integración de Euler
fuente
En lugar de manipular la velocidad directamente, agregue otra variable: aceleración , que gradualmente altera la velocidad suavemente :
De la física clásica ( leyes del movimiento de Newton ):
dónde:
(Tenga en cuenta que m es el único valor escalar; F, a, v y p son todos vectores 2D o 3D)
Además, en realidad hay dos direcciones:
Respondí una pregunta relacionada sobre StackOverflow: matemática del movimiento de nave espacial 2D . Hay algún código de muestra en esa respuesta.
fuente