java - 获取相对于 xy 坐标的鼠标方向
问题描述
我正在开发一个 java 游戏,我想在其中实现一些战斗。我想实现战斗的方式是通过一个按钮,根据鼠标光标的位置,我想朝那个方向攻击。问题是,我无法仅通过 x 和 y 坐标检测相对于玩家的方向。如果我在没有任何数学或其他任何东西的情况下这样做,我会得到这些象限来测量方向:
^^ 这些行不通,因为这会让我:左上、右上、左下和右下。
我想要上下左右,像这样:如果鼠标在这些象限之一,它会朝那个方向攻击。这会让我向上、向右、向下、向左(按照上面显示的象限)
以下是我拥有的信息:鼠标 x 坐标、鼠标 Y 坐标、玩家 X 坐标、玩家 Y 坐标。
我确定有一些数学可以将这些象限转换为这些象限,以便我可以检测鼠标相对于玩家的方向。
这是我用来检测鼠标方向的代码示例(此代码用于格式,因为我无法弄清楚另一个):
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;
}
我希望我为某人提供了足够的信息来弄清楚方向数学,但是如果您需要更多信息,请告诉我!
编辑:
我通过在谷歌上进行一些搜索和我自己的故障排除来解决这个问题。结果是使用线条公式来获取相对于鼠标的每一行是要走的路。
解决方案
也许它会帮助你计算两点之间的角度。
double angle = Math.toDegrees(Math.atan2(mouseY - y, mouseX - x));
if(angle < 0) { angle += 360; } // angle always >= 0
推荐阅读
- voip - 在 Opensips 中使用 avp_db_query 手动保存 cdrs
- groovy - 如何在groovy中对多值列表进行排序?
- jenkins - 如何在 Sonarqube 中集成 Jacoco 报告
- swift4 - iOS XCode - 带有 RXSwift 的 Swift Playground 一直被微调器冻结
- phpstorm - 我在 PhpStorm 中没有 Source Code Pro 字体
- java - Thymeleaf 提交抽象类型的集合
- machine-learning - 在 Weka - 不规范化所有数字属性
- java - 如何在使用 java 执行 watson 助手的功能时禁用 okhttp3.internal.platform.Platform 日志在我的控制台上打印?
- llvm - 通过不再工作:未定义的符号_ZN4llvm24DisableABIBreakingChecksE
- spring-data-jpa - JPA 规范:从列表中选择具有至少一个具有属性的参数的所有实体