【问题标题】:Rotate image according to the mouse根据鼠标旋转图像
【发布时间】:2015-05-27 04:49:52
【问题描述】:

我正在尝试根据鼠标旋转图像。这个想法是一个宇宙飞船游戏。飞船的尖端跟随鼠标光标,根据光标位置飞船旋转一个角度。

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

【问题讨论】:

    标签: c allegro allegro5


    【解决方案1】:
    atan ((spaceship.y - game_event.mouse.y) / (spaceship.x - game_event.mouse.x));
    

    当然要避免测试/ 0

    你需要

    #include <math.h>
    

    【讨论】:

    • atan2(dy, dx) 将负责除以零,并根据dxdy 的符号将角度置于右象限。 (然后您可能必须交换减法的参数,因此角度为 0 意味着飞船朝 (1, 0) 方向前进。)
    【解决方案2】:
    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 类似)

    【讨论】:

    • 也许您可以展示解决方案中显示的方向函数的实现
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2012-06-15
    相关资源
    最近更新 更多