如何获取网格窗格中不同行和列的 X 和 Y 坐标?

问题描述 投票:0回答:1

我目前正在制作一个游戏板,希望能够将棋子从一个图块移动到另一个图块。我试图通过在用户单击每个图块时获取每个图块的 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
,无论我点击哪个网格行/列。有什么建议吗?

java user-interface javafx game-development gridpane
1个回答
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());
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.