rotate_sprite вращение ~65625 раз слишком мало

Я использую c++98 и Allegro 4 и пытаюсь использовать эту rotate_spriteфункцию. Docume ntation утверждает, что в параметре angle 256 является полным кругом, а 64-прямым углом.

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

При тестировании я обнаружил, что спрайт не вращался, но также обнаружил, что когда я значительно увеличил параметр, я смог получить вращение с номером 4200000, который, казалось, обеспечивал прямой угол.

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

Итак, мой вопрос: почему 4200000 дает прямой угол, когда документация утверждает, что 64 даст прямой угол? А каково фактическое значение прямого угла? 4200000 работало в данном случае, но какое точное число на будущее?

1 ответ

  1. itofixФункция используется для преобразования целого числа в число с фиксированной точкой 16.16, которое является типом параметра. Таким образом, рабочая версия образца сверху:

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