Cosas a tener en cuenta para calcular los movientos, rotaciones y colisiones del jugador con el mapa

Para poder determinar correctamente la posición del jugador en el plano y los cambios de posición y orientación, es necesario tener en cuenta los siguientes aspectos fundamentales:

Explicacion de los movimientos

Para poder mover al jugador dentro del mapa (espacio euclidiano discreto), es necesario tener en cuenta su posición inicial y la dirección del vector de orientación, es decir, hacia dónde mira. Esta dirección puede expresarse mediante sus coordenadas o componentes (d_x, d_y), o bien mediante el ángulo de rotación del jugador respecto a los ejes del plano. Utilizando la circunferencia goniométrica y las razones trigonométricas, se puede establecer una relación que permite obtener las proyecciones del vector de dirección sobre los ejes X e Y, donde d_x = cos(θ) y d_y = sin(θ). Esto hace posible medir la variación de posición del personaje de forma independiente de su orientación y de su posición inicial en cada movimiento discreto.

Para conocer el diferencial de cada movimiento en los ejes del plano, se utilizan las ecuaciones paramétricas y diferenciales, donde dx/dt = d_x y dy/dt = d_y. Una vez obtenidas las componentes del vector de dirección a partir del ángulo y de las razones trigonométricas, se sabe qué proporción del desplazamiento total se proyecta sobre cada eje del espacio bidimensional euclidiano que representa el mapa. Multiplicando cada componente del vector por el desplazamiento aplicado en ese instante, Δx = d_x * Δt y Δy = d_y * Δt, se obtiene el diferencial de posición en cada eje, lo que permite calcular la nueva posición del punto que representa al jugador dentro del mapa: x_nuevo = x_0 + Δx y y_nuevo = y_0 + Δy.

La trayectoria que sigue el jugador no es más que un conjunto de puntos calculados en distintos instantes de tiempo que siguen una dirección determinada. Mediante este procedimiento se simula un movimiento continuo dentro de un espacio discreto, aproximando el comportamiento de un espacio euclidiano continuo a partir de una malla de celdas o píxeles.

Movimientos_rotaciones2D.jpg

Rotaciones del jugador

Las rotaciones del jugador en el plano (hacia dónde apunta su vector de posición) se realizan sumando o restando grados al ángulo de rotación, a partir del cual se definen las componentes del vector de posición. Existen dos sentidos de rotación: horario y antihorario.

Normalmente, para rotar al jugador en sentido horario, se le deben restar grados al ángulo de rotación, y para rotarlo en sentido antihorario, se le deben sumar grados. Sin embargo, si los ejes X e Y del plano (por ejemplo Norte-Sur) están invertidos en la ventana gráfica o en la API utilizada para el renderizado, los sentidos de rotación pueden funcionar al revés.

Es importante tener en cuenta que, para el posterior cálculo de las componentes del vector de dirección del punto (jugador), no importa que el ángulo de rotación supere los límites tradicionales de 0° a 360°. Sin embargo, por cuestiones de almacenamiento en la variable que guarda el ángulo, un valor mayor que 360° o menor que 0° podría generar un overflow y causar errores en el funcionamiento esperado. Por ello, cuando el jugador tenga una rotación mayor que 360°, debemos restarle 360°, y cuando tenga una rotación menor que 0°, debemos sumarle 360° para normalizar el ángulo y evitar problemas.

Por otra parte, es importante recordar que las razones trigonométricas en la librería math se calculan mediante las funciones sin, cos y tan usando ángulos expresados en radianes. Por esta razón, siempre que vayamos a calcular las componentes del vector de dirección para determinar el diferencial del movimiento del jugador, debemos convertir los ángulos de grados a radianes previamente.

image.png

razones_trigonometricas.png

Como imitar las traslaciones en las direcciones WASD.