es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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;

Tags:  , ,

Answer

  1. Avatar for 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.

Comments are closed.