C 根据鼠标旋转图像

C 根据鼠标旋转图像,c,allegro,allegro5,C,Allegro,Allegro5,我正在尝试根据鼠标旋转图像。这个想法是一个宇宙飞船游戏。太空船的顶端跟随鼠标光标,这取决于航天器旋转一个角度的光标位置 我正在使用的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_

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

我正在使用的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

atan ((spaceship.y - game_event.mouse.y) / (spaceship.x - game_event.mouse.x));
当然要进行测试,以避免出现错误/0

你需要

#include <math.h>
这更像是一个从头开始的代码,具有更好的控制和更好的实践,并且可以独立于库。您可以随时调整文字

nframes是图像中的帧数 方向是返回x1-x2-y1-y2之间的方向(以角度表示)的函数 animpos是要显示的动画帧 x屏幕x图像位置,屏幕相关Y屏幕类似 xmouse鼠标的水平位置,与屏幕相关的xmouse是类似的
atan2dy,dx将负责除以0,并根据dx和dy的符号将角度放在右象限。然后你可能需要交换减法的参数,因此角度为0表示宇宙飞船朝1前进,0方向。也许您可以显示解决方案中显示的方向函数的实现
double mouseangle = direction(xscreen - 45, yscreen, xmouse, ymouse); 
animpos = (mouseangle/180.0)*(nframes-1);