繁体   English   中英

用鼠标进行Java 2d拍摄方向

[英]Java 2d Shooting direction with mouse

我的问题可能很简单。 我今天大部分时间都在考虑一种算法(如果声明,那可能会是一对),它将确定鼠标指向的方向并向该方向发射子弹。 我已经测试了子弹,以确保它们按规定的方向射击。

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

解决:感谢您的所有帮助,但经过一整天的思考,我想出了一种解决自己的方法。 我所做的是使用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;
} 

如果要在按下鼠标按钮的同时进行拍摄,则必须实现Mouse move actionlistener。

简单的线方程就可以做到。

解决方案:按下按钮时获取初始点(x0,y0) 在按下鼠标键的同时移动鼠标,获取鼠标移动的位置(x1,y1) (这是不断变化的)-获取直线方程-(您有2个点,因此找到slope ,然后使用一个点获取equation of the line ) 。

现在,子弹发射的方向是perpendicular to this line through (x1,y1) 因此,当其他方程式已知时,您可以找到该垂直线的方程式。 现在知道是否必须将其发射或发射,是相对于确定枪的指向哪一侧(方向存储在变量中)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM