Java 2d用鼠标拍摄方向

时间:2012-05-11 21:41:58

标签: java algorithm direction projectile

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

如果鼠标位于播放器的左侧,右侧,顶侧,底侧,或者它是否位于播放器的角落,我将如何计算?

解决了:感谢您的帮助,但经过一天的思考后,我想出了一个自己的方式。我所做的是使用if语句来确定我何时按下鼠标,它是否会与播放器的顶部,底部,右侧,左侧或角落发生碰撞。无论如何,这是我的代码。附:我使用变量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;
} 

1 个答案:

答案 0 :(得分:1)

如果要在按下鼠标按钮的同时实现拍摄,则必须实现鼠标移动动作侦测器。

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

解决方案:按下按钮时获取初始点(x0,y0)。当鼠标移动时按下鼠标移动,得到鼠标移动的(x1,y1)点(这会不断变化) - 得到线方程 - (你得2分,所以找{4}}然后用一个点得到{ {1}})。

现在子弹射击的方向是slope。因此,当已知其他方程时,您可以找到此垂直线的方程。现在要知道是否必须向上或向下发射是相对于发现枪指向哪一侧(方向存储在变量中)

完成所有这些操作后,当鼠标仍在移动时,旧点将为equation of the line,新点将为perpendicular to this line through (x1,y1),您将继续实施这些更改。