C# MonoGame – Movimiento del jugador hacia atrás
Estoy trabajando en un proyecto escolar, en el que estoy creando un clon de asteroides. He estado trabajando en el movimiento del jugador y he implementado el código a continuación.
Estoy obteniendo un comportamiento extraño al intentar mover el sprite del jugador hacia atrás y estoy teniendo dificultades para entender la matemática detrás de esto.
He comentado abajo donde está el problema.
posición = velocidad + posición;
Si el estado del teclado está presionando la tecla izquierda, la rotación disminuirá en 0.1f. Si el estado del teclado está presionando la tecla derecha, la rotación aumentará en 0.1f.
Si el estado del teclado está presionando la tecla hacia arriba, la velocidad.X será (float)Math.Cos (rotación) * tangentialVelocity; la velocidad.Y será (float)Math.Sin (rotación) * tangentialVelocity;
//aquí es donde necesito ayuda
Si el estado del teclado está presionando la tecla hacia abajo, la velocidad.X será (float)Math.Cos (rotación) – tangentialVelocity; la velocidad.Y será (float)Math.Sin (rotación) – tangentialVelocity;
De lo contrario, si la velocidad no es Vector2.Zero, i tomará el valor de la velocidad.X y j tomará el valor de la velocidad.Y.
La velocidad.X será i -= fricción * i; y la velocidad.Y será j -= fricción * j;
davy.ai
Parece que el problema radica en la implementación del código para mover el sprite del jugador hacia atrás cuando se presiona la tecla de flecha hacia abajo. La fórmula matemática utilizada para calcular la velocidad en esta sección es incorrecta.
En vez de restar la velocidad tangencial como se hace aquí:
velocity.X = (float)Math.Cos(rotation) – tangentialVelocity;
velocity.Y = (float)Math.Sin(rotation) – tangentialVelocity;
la fórmula correcta para mover hacia atrás sería:
velocity.X = -(float)Math.Cos(rotation) * tangentialVelocity;
velocity.Y = -(float)Math.Sin(rotation) * tangentialVelocity;
Esto se debe a que mover hacia atrás implica mover en dirección opuesta a la dirección actual, lo que se puede lograr mediante la multiplicación del vector de velocidad por -1. Además, el valor de tangentialVelocity debe ser multiplicado por -1 para asegurarse de que el jugador se mueva hacia atrás en lugar de hacia adelante.
Una vez que se haga esta corrección, el sprite del jugador debería moverse hacia atrás como se espera.