2015-05-27 104 views
0

我想根据鼠标旋转图像。这个想法是一个太空飞船游戏。飞船的尖端跟随着鼠标光标,这取决于航天器旋转角度的光标位置。根据鼠标旋转图像

我使用的快板旋转功能:

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 

当确定根据鼠标旋转的直角时,只需发送角度为th e“DrawSpaceship”功能。该功能在主循环中绘制太空船。

观测值:我使用C和Allegro5

回答

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

当然了测试,以避免/ 0

您需要

#include <math.h> 
+0

'ATAN2(DY,DX)'会照顾的被零除,并且还根据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 E公司的水平位置时,屏幕相关(xmouse类似于)
+0

也许你可以显示方向功能的实现你的解决方案 – rlam12