1

我的问题可能很简单。我今天大部分时间都在考虑一种算法(这很可能是几个 if 语句),它将确定鼠标指向的方向并朝那个方向发射子弹。我已经对子弹进行了测试,以确保它们通过向定义的方向射击来射击。

我将如何计算鼠标是在播放器的左侧、右侧、顶部、底部还是在播放器的角落?

已解决:感谢您的所有帮助,但经过一天的思考,我想出了一个自己的方法。我所做的是使用 if 语句来确定当我按下鼠标时,它是否会与播放器的顶部、底部、右侧、左侧或角落发生碰撞。无论如何,这是我的代码。PS我使用变量x1作为mousex,y1作为mousey,x作为playerx,y作为player y。我唯一的其他变量是 dx 和 dy 但你应该知道它们的作用。

//top
if (x1 > x && x1 < x + 40 && y1 > y - 250 && y1 < y){
        dy = -1;
    dx = 0;
}
//right
if (x1 > x + 40 && x1 < x + 250 && y1 > y && y1 < y + 40){
    dx = 1;
    dy = 0;
}
//bottom
if (x1 > x && x1 < x + 40 && y1 > y+40 && y1 < y+250){
    dy = 1;
    dx = 0;
}
//left
if (x1 < x && x1 > x - 250 && y1 > y && y1 < y + 40){
    dx = -1;
    dy = 0;
}
//top right corner
if (x1 > x + 40 && x1 < x + 250 && y1 > y - 250 && y1 < y){
    dx = 1;
    dy = -1;
}
//top left corner
if (x1 < x && x1 > x - 250 && y1 > y - 250 && y1 < y){
    dx = -1;
    dy = -1;
}
//bottom right corner
if (x1 > x + 40 && x1 < x + 250 && y1 > y + 40 && y1 < y + 250){
    dx = 1;
    dy = 1;
}
//bottom left corner
if (x1 < x && x1 > x - 250 && y1 > y + 40 && y1 < y + 250){
    dx = -1;
    dy = 1;
} 
4

1 回答 1

1

如果要在按下鼠标按钮时实现射击,则必须实现鼠标移动动作侦听器。

简单的直线方程就可以了。

(x0,y0)解决方法:获取按钮按下时的初始点。当按下鼠标移动时,获取鼠标移动(x1,y1)的点(这会不断变化)-获取线方程-(您有 2 个点,所以找到slope然后使用一个点来获取equation of the line)。

现在子弹发射的方向是perpendicular to this line through (x1,y1). 因此,当已知另一个方程时,您可以找到该垂直线的方程。现在要知道它是否必须向上或向下发射是相对于找出枪指向哪一侧(方向存储在变量中)

毕竟,当鼠标仍然移动时,旧点现在将成为(x1,y1)新点(x2,y2),并且您继续实施这些更改。

于 2012-05-11T22:01:03.477 回答