2016-05-06 4 views
0

J'utilise C++ 98 et Allegro 4 et j'essaie d'utiliser la fonction rotate_sprite. Le documentation affirme que dans le paramètre angle, 256 est un cercle complet et 64 est un angle droit.rotate_sprite rotation est ~ 65625 fois trop petit

void rotate_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y, fixed angle); 

Lors du test, je trouve que le lutin ne tournait pas, mais aussi trouvé quand j'augmenté de manière significative le paramètre que j'ai pu obtenir une rotation avec le numéro 4200000 apparaissant pour fournir un angle droit.

rotate_sprite(world, plane, plane_x, plane_y, 4200000 * plane_r); 
//plane_r is an int 0 to 3 

Alors ma question est pourquoi est-4200000 obtenir un angle droit lorsque la documentation revendique un 64 donnera un angle droit? Et quelle est la valeur réelle d'un angle droit? 4200000 travaillé dans ce cas, mais quel est le nombre exact pour l'avenir?

+1

La documentation dit que 'angle' est le point fixe 16. Que faites-vous passer? Vous pourriez vouloir regarder ceci. http://stackoverflow.com/questions/187713/converting-floating-point-to-fixed-point – Matt

+0

@Matt Oh, merci. Je l'ai manqué dans la documentation. J'ai vu 'itofix' dans les fonctions associées. Je vais essayer d'utiliser ça. –

Répondre

0

La fonction itofix est utilisée pour transformer l'entier en un nombre à 16.16 point fixe, qui est le type du paramètre. Donc une version de travail de l'échantillon ci-dessus est:

rotate_sprite(world, plane, plane_x, plane_y, itofix(plane_r * 64));