C和Allegro-如何在俯视2D射击游戏中检测射击?

C和Allegro-如何在俯视2D射击游戏中检测射击?,c,allegro,C,Allegro,此函数用于在while循环的每个循环中,在给定位置和给定角度绘制播放器的位图。由于键盘中的事件和鼠标在x轴上的移动,播放机的角度会改变移动。忽略鼠标敏感度的划分(这是一个内部方面)。考虑一下,通过移动鼠标可以使玩家在自己的轴上完美地旋转。(OBS:武器的图像已经出现在玩家的图像上,因此武器会与玩家一起旋转) 现在,当按下鼠标左键时,武器末端会出现一个“火焰图像” 考虑到所有这些,我们让我们的玩家在地图上移动(在W、A、s、D的每个事件中增加和减少它自己的XPO和YPO),并且我们在地图上有另一个

此函数用于在while循环的每个循环中,在给定位置和给定角度绘制播放器的位图。由于键盘中的事件和鼠标在x轴上的移动,播放机的角度会改变移动。忽略鼠标敏感度的划分(这是一个内部方面)。考虑一下,通过移动鼠标可以使玩家在自己的轴上完美地旋转。(OBS:武器的图像已经出现在玩家的图像上,因此武器会与玩家一起旋转)

现在,当按下鼠标左键时,武器末端会出现一个“火焰图像”

考虑到所有这些,我们让我们的玩家在地图上移动(在W、A、s、D的每个事件中增加和减少它自己的XPO和YPO),并且我们在地图上有另一个具有相同容量的玩家。当我们发射武器时(当我们按下鼠标左键时),如果其他玩家在武器角度范围内,我们必须击中他

问题是:我该怎么做

if (state.buttons & 1) {
            al_draw_rotated_bitmap(pistolFire, defaultPlayer1.size / 8, defaultPlayer1.size / 2, 
            defaultPlayer1.pos[0], defaultPlayer1.pos[1], mousePos / mouseSensitivity, 0); }
仅考虑武器的角度以及两名玩家的x和y位置,我如何编写这样的函数?

您可以使用atan2()计算玩家之间的角度。如果它等于(在可接受的增量范围内)枪所面对的角度,那么玩家就被击中了


如果两名球员之间有什么东西可以吸收打击,那么你需要沿着枪声发射的方向走一条线。您可以将两者结合起来,以获得最佳解决方案。

通过射击玩家的角度和位置,您可以画一条线,如果另一个玩家的身体是该线的一部分,他将被击中。我不知道你是否有障碍。
if (state.buttons & 1) {
            al_draw_rotated_bitmap(pistolFire, defaultPlayer1.size / 8, defaultPlayer1.size / 2, 
            defaultPlayer1.pos[0], defaultPlayer1.pos[1], mousePos / mouseSensitivity, 0); }
if (state.buttons & 1) {
    detectShotColision(); }