2016-05-06 11 views
0

Ich benutze C++ 98 und Allegro 4 und ich versuche, die rotate_sprite Funktion zu verwenden. Die documentation behauptet, dass in dem Winkelparameter 256 ein voller Kreis und 64 ein rechter Winkel ist.rotate_sprite Rotation ist ~ 65625 mal zu klein

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

Bei der Prüfung fand ich, dass das Sprite nicht drehen, sondern auch gefunden, wenn ich die Parameter konnte ich bekommen Rotation mit der Nummer 4200000 erscheinen, um einen rechten Winkel deutlich erhöht.

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

Also meine Frage ist, warum tut 4200000 Ausbeute ein rechter Winkel, wenn die Dokumentation ein 64 behauptet wird einen rechten Winkel ergeben? Und was ist der tatsächliche Wert eines rechten Winkels? 4200000 hat in diesem Fall gearbeitet, aber wie lautet die genaue Zahl für die Zukunft?

+1

Die Dokumentation sagt, dass "Winkel" Fixpunkt 16 ist. Was passierst du? Vielleicht möchten Sie sich das ansehen. http://stackoverflow.com/questions/187713/converting-floating-point-to-fixed-point – Matt

+0

@Matt Oh, danke. Das habe ich in der Dokumentation verpasst. Ich habe 'itifix' in den verwandten Funktionen gesehen. Ich werde es versuchen. –

Antwort

0

Die Funktion itofix wird verwendet, um die ganze Zahl in eine feste 16.16-Zahl umzuwandeln, die der Typ des Parameters ist. Eine funktionierende Version der Probe von oben ist also:

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