首页 > 解决方案 > 获取相对于 xy 坐标的鼠标方向

问题描述

我正在开发一个 java 游戏,我想在其中实现一些战斗。我想实现战斗的方式是通过一个按钮,根据鼠标光标的位置,我想朝那个方向攻击。问题是,我无法仅通过 x 和 y 坐标检测相对于玩家的方向。如果我在没有任何数学或其他任何东西的情况下这样做,我会得到这些象限来测量方向: 交叉格式

^^ 这些行不通,因为这会让我:左上、右上、左下和右下。

我想要上下左右,像这样:X 格式如果鼠标在这些象限之一,它会朝那个方向攻击。这会让我向上、向右、向下、向左(按照上面显示的象限)

以下是我拥有的信息:鼠标 x 坐标、鼠标 Y 坐标、玩家 X 坐标、玩家 Y 坐标。

我确定有一些数学可以将这些象限碰撞检测的交叉格式转换为这些象限X 格式,以便我可以检测鼠标相对于玩家的方向。

这是我用来检测鼠标方向的代码示例(此代码用于交叉格式格式,因为我无法弄清楚另一个):

private Direction getMouseRelativeDirection() {
    if(mouseX > x && mouseY < y)
        return Direction.topRight;
    if(mouseX > x && mouseY > y)
        return Direction.bottomRight;
    if(mouseX < x && mouseY < y)
        return Direction.topLeft;
    if(mouseX < x && mouseY > y)
        return Direction.bottomLeft;

//to prevent errors if the mouse isn't in a quadrant, just return null
    return null;
}

我希望我为某人提供了足够的信息来弄清楚方向数学,但是如果您需要更多信息,请告诉我!

编辑:

我通过在谷歌上进行一些搜索和我自己的故障排除来解决这个问题。结果是使用线条公式来获取相对于鼠标的每一行是要走的路。

标签: javagame-physicsdirection

解决方案


也许它会帮助你计算两点之间的角度。

double angle = Math.toDegrees(Math.atan2(mouseY - y, mouseX - x));
if(angle < 0) { angle += 360; } // angle always >= 0

推荐阅读