Повернуть изображение в соответствии с мышью

Я пытаюсь повернуть изображение в соответствии с мышью. Идея игры космический корабль. Кончик космического корабля следует за курсором мыши, в зависимости от положения курсора космический корабль поворачивается на угол.

Функция вращения Allegro, которую я использую:

al_draw_rotated_bitmap(OBJECT_TO_ROTATE,CENTER_X,CENTER_Y,X,Y,DEGREES_TO_ROTATE_IN_RADIANS);

Это положение космического корабля по осям x и y:

spaceship.x
spaceship.y

И положение x и y курсора мыши:

game_event.mouse.x
game_event.mouse.y

Когда правильный угол поворота в соответствии с мышью определен, просто отправьте угол для функции "DrawSpaceship". Эта функция рисует космический корабль в основном цикле.

Obs: я использую C и Allegro5


person user50811    schedule 27.05.2015    source источник


Ответы (2)


atan ((spaceship.y - game_event.mouse.y) / (spaceship.x - game_event.mouse.x));

Конечно, с тестом, чтобы избежать / 0

Тебе понадобится

#include <math.h>
person Ôrel    schedule 27.05.2015
comment
atan2(dy, dx) позаботится о делении на ноль, а также поместит угол в правый квадрант в соответствии со знаком dx и dy. (И тогда вам, вероятно, придется поменять местами аргументы ваших вычитаний, так что угол 0 означает, что космический корабль движется в направлении (1, 0).) - person M Oehm; 27.05.2015

double mouseangle = direction(xscreen - 45, yscreen, xmouse, ymouse); 
animpos = (mouseangle/180.0)*(nframes-1); 

Это более «с нуля» код с лучшим контролем и, безусловно, лучшей практикой, и он может быть независимым от библиотеки. Вы всегда можете настроить литералы.


  • nframes — количество кадров в изображении
  • direction — это функция, которая возвращает направление между x1 x2 y1 y2 в углах
  • animpos — кадр анимации, который вы хотите показать
  • xscreen x позиция изображения относительно экрана (аналогично yscreen)
  • xmouse горизонтальное положение мыши относительно экрана (аналог xmouse)
person Imobilis    schedule 27.05.2015
comment
Может быть, вы можете показать реализацию функции направления, отображаемую в вашем решении. - person rlam12; 01.06.2015