2010-02-16 6 views
12

¿qué hay en XNA en 2D, los ángulos de vector estándar funcionan?XNA 2D ángulos vectoriales: ¿cuál es la forma correcta de calcular?

0 grados puntos a la derecha, 90 puntos arriba, 180 izquierda, 270 abajo?

¿Cuáles son las implementaciones 'estándar' de

float VectortoAngle(Vector2 vec) 

y

Vector2 AngleToVector(float angle) 

por lo que VectortoAngle (AngleToVector (PI)) == PI?

Respuesta

21

Para responder a su primera pregunta, 0 grados apunta hacia arriba, 90 grados apunta hacia la derecha, 180 grados hacia abajo y 270 grados hacia la izquierda. Here es un sencillo tutorial de rotación 2D XNA para darle más información.

En cuanto a la conversión de vectores de ángulos y hacia atrás, me encontré un par buenas implementaciones here:

Vector2 AngleToVector(float angle) 
{ 
    return new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)); 
} 

float VectorToAngle(Vector2 vector) 
{ 
    return (float)Math.Atan2(vector.Y, vector.X); 
} 

Además, si usted es nuevo en la programación 2D, es posible que desee ver en Torque X 2D, que proporciona una Mucho de esto para ti. Si ha pagado para desarrollar XNA, obtiene los binarios del motor de forma gratuita, y hay una clase de utilidad que convierte los ángulos en vectores y viceversa, así como otras funciones útiles como esta.

Edit: Como señaló Ranieri en los comentarios, esa función no tiene sentido cuando el aumento es de 0 grados. Aquí hay una que hace (UP es (0, -1), a la derecha es (1, 0), es decir hacia abajo (0, 1), izquierda es (-1, 0):

Vector2 AngleToVector(float angle) 
{ 
    return new Vector2((float)Math.Sin(angle), -(float)Math.Cos(angle)); 
} 

float VectorToAngle(Vector2 vector) 
{ 
    return (float)Math.Atan2(vector.X, -vector.Y); 
} 

También me gustaría para observar que he estado usando Torque por un tiempo, y usa 0 grados para arriba, así que ahí es donde obtuve esa parte. Hasta el significado, en este caso, dibuja la textura en la pantalla de la misma manera que está en el archivo. así negativo sería dibujar la textura al revés.

+1

Algo pasa. Dice 0 grados hacia arriba, pero su función regresa (1,0), que es correcta en la mayoría de los sistemas de coordenadas que he visto, para 0 grados. – drxzcl

+0

¡Buena captura, gracias! – Venesectrix

1

no existe un convenio por el cual la dirección de un cierto ángulo representa en XNA, por lo que sólo se puede definir como usted quiera.

no estoy seguro cuando la última vez que usé ángulos en un juego estaba. En casi todos los casos es más fácil trabajar directamente con vectores, si es un poco menos intuitivo para empezar.

Cuestiones relacionadas