2010-02-16 5 views
12

Qu'y a-t-il dans XNA en 2D que les angles vectoriels standard fonctionnent?XNA 2D angles de vecteur - quelle est la bonne façon de calculer?

0 degrés points à droite, 90 points en haut, 180 à gauche, 270 en baisse?

Quelles sont les implémentations 'standard' de

float VectortoAngle(Vector2 vec) 

et

Vector2 AngleToVector(float angle) 

afin que VectortoAngle (AngleToVector (PI)) == PI?

Répondre

21

Pour répondre à votre première question, 0 degré de points vers le haut, 90 degrés vers la droite, 180 degrés vers le bas et 270 degrés vers la gauche. Here est un simple tutoriel de rotation 2D XNA pour vous donner plus d'informations.

En ce qui concerne la conversion des vecteurs à des angles et le dos, j'ai trouvé quelques bonnes implémentations 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); 
} 

Aussi, si vous êtes nouveau à la programmation 2D, vous pouvez regarder dans Torque X 2D, qui fournit une beaucoup de ceci pour vous. Si vous avez payé pour développer pour XNA vous obtenez les binaires du moteur gratuitement, et il y a une classe d'utilité qui convertit des angles aux vecteurs et retour, ainsi que d'autres fonctions utiles comme celle-ci.

Editer: Comme Ranieri l'a souligné dans les commentaires, cette fonction n'a pas de sens quand up est 0 degrés. Voilà qui fait (up est (0, -1), est à droite (1, 0), vers le bas est (0, 1), gauche (-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); 
} 

Je voudrais également pour noter que j'utilise Torque depuis un moment, et qu'il utilise 0 degrés pour le haut, donc c'est là que j'ai obtenu cette partie: dans ce cas, dessiner la texture à l'écran de la même manière que dans le fichier. donc, vers le bas établiraient la texture à l'envers.

+1

Quelque chose ne va pas. Vous dites 0 degrés de haut, mais votre fonction renvoie (1,0), ce qui est exact dans la plupart des systèmes de coordonnées que j'ai vu, pour 0 degrés. – drxzcl

+0

Bonne prise, merci! – Venesectrix

1

il n'y a pas de convention pour la direction d'un certain angle représente XNA, de sorte que vous pouvez simplement définir comme bon vous semble.

Je ne suis pas sûr quand la dernière fois que j'ai utilisé des angles dans un jeu était. Dans presque tous les cas, il est plus facile de travailler directement avec des vecteurs, même si c'est un peu moins intuitif.

Questions connexes