我目前正在制作一个游戏板,希望能够将棋子从一个图块移动到另一个图块。我试图通过在用户单击每个图块时获取每个图块的 centerX 和 centerY 来实现此目的,这将允许我根据这些值移动我的棋子。
这是我尝试过的:
gameBoard.setOnMouseClicked(evt -> {
Node target = evt.getPickResult().getIntersectedNode();
if (target != gameBoard) {
Bounds bounds = target.getBoundsInParent();
System.out.println("bounds = " + bounds);
System.out.println("centerX = " + (bounds.getMinX() + bounds.getWidth()/2));
System.out.println("centerY = " + (bounds.getMinY() + bounds.getHeight()/2));
}
});
但是,
centerX =
和centerY =
只打印出25.0
,无论我点击哪个网格行/列。有什么建议吗?
问题可能是由
target.getBoundsInParent()
引起的,这为您提供了与其父元素相关的单击元素边界。
您获得的原因
centerX = 25.0
和
中心Y = 25.0
对于所有单元格是因为,如果您的网格单元格是统一的,单击任何单元格都会给您相同的尺寸及其与其父级的相对位置。
尝试将本地坐标转换为场景坐标。
gameBoard.setOnMouseClicked(evt -> {
Node target = evt.getPickResult().getIntersectedNode();
if (target != gameBoard) {
Bounds bounds = target.getBoundsInParent();
Point2D pointInScene = target.localToScene(bounds.getMinX() + bounds.getWidth() / 2, bounds.getMinY() + bounds.getHeight() / 2);
System.out.println("bounds = " + bounds);
System.out.println("centerX in Scene = " + pointInScene.getX());
System.out.println("centerY in Scene = " + pointInScene.getY());
}
});