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

Я использую C++98 и Allegro 4, и я пытаюсь использовать rotate_sprite функция. Документация утверждает, что в параметре угла 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 ответ

Решение

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

rotate_sprite(world, plane, plane_x, plane_y, itofix(plane_r * 64));
Другие вопросы по тегам