2015-05-27 2 views
0

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

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

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

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

spaceship.x 
spaceship.y 

А х и у позиции курсора мыши:

game_event.mouse.x 
game_event.mouse.y 

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

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

ответ

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

С конечно тест, чтобы избегать / 0

Вам нужно будет

#include <math.h> 
+0

'atan2 (ду, дх) 'будет заботиться о делении на ноль, а также поместить угол в правом квадранте в соответствии со знаком' dx' и 'dy'. (И тогда вам, вероятно, придется поменять аргументы ваших вычитаний, так что угол 0 означает, что этот космический корабль направляется в направлении (1, 0).) –

0
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 mous горизонтальное положение Э, экран, связанных с (xmouse аналогично)
+0

Возможно, вы можете показать реализацию функции направления, отображаемой в ваше решение – rlam12