问题描述
注意:我正在使用 TornadoFX 和 kotlin,但它基于 JavaFX 并添加了一些 kotlin,这就是为什么我要提到 JavaFX,因为它似乎与 JavaFX 的关系比 TornadoFX 更相关。
我正在尝试获取 JavaFX 窗口(场景)上特定位置的颜色。 原因是因为对于我的 2D 游戏,我正在尝试构建地图。例如,如果我触摸黑色,则停止朝那个方向移动(边界也是如此)。或者,如果它是红色的,则失去生命(障碍)。而不是硬编码(我不知道如何做到这一点,因为我不希望地图只是一个正方形),我正在尝试获取像素并获取颜色。 请注意,由于这是命中检测系统的一部分,它将每秒运行 100 次以上,因此我需要一个不会花费太多时间的解决方案。
另外,请注意,我不是要从图像中获取像素,而是要从用户看到的窗口中获取。 (只是澄清,以免有人误解) 编辑:我刚刚意识到我可以使用图像并从中获取颜色......尽管如果我放大图像以使地图更大......那部分让我感到困惑,我当时该怎么做。
解决方法
您可以使用 Robot API 来执行此操作,要获取当前鼠标位置的颜色,您可以执行此操作
int xValue = MouseInfo.getPointerInfo().getLocation().x;
int yValue = MouseInfo.getPointerInfo().getLocation().y;
Robot robot = new Robot();
Color color = robot.getPixelColor(xValue,yValue);
要在光标移动时获取当前位置,您需要使用 setOnMouseMoved 侦听器
yourViewNode.setOnMouseMoved(event -> {
int xValue = MouseInfo.getPointerInfo().getLocation().x;
int yValue = MouseInfo.getPointerInfo().getLocation().y;
Robot robot = new Robot();
Color color = robot.getPixelColor(xValue,yValue);
});
然后你可以比较颜色并检查它,如果你想要用户点击时的颜色,你只需要监听右键或左键点击然后在监听器中使用相同的代码来获取此时的颜色
我在我的机器人创建者项目中使用了这个解决方案来提供可以根据当前位置颜色采取行动的工具