我正在写一个20x20网格的棋盘游戏。
这是我的董事会成员:
private final Position[][] grid = new Position[GRID_SIZE][GRID_SIZE];
每个职位都有:
public class Position {
private final Coordinates pos;
private Player player;
private final static double RECTANGLE_SIZE = 40.0;
private final Rectangle rect = new Rectangle(RECTANGLE_SIZE, RECTANGLE_SIZE);
}
所以基本上我有20x20个位置,每个位置都有一个矩形
这是我显示网格的方法
for (int cols = 0; cols < GRID_SIZE; ++cols) {
for (int rows = 0; rows < GRID_SIZE; ++rows) {
grid.add(gameEngine.getBoard().getGrid()[cols][rows].getRect(), cols, rows);
}
}
无论如何,网格已初始化并正常运行。我想要做的是使矩形对象可以点击,并且能够在点击它们时返回它们的坐标。
这就是我处理鼠标点击的方式
private void setUpRectangle() {
rect.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
rect.setFill(Color.BLACK);
}
});
}
此代码的作用是将矩形的颜色更改为黑色,但我如何返回坐标。 基本上,我可以编辑onclick函数来返回这个位置的坐标,但是我怎样才能在以后获取它们呢?
答案 0 :(得分:0)
这不是JavaFX问题,而是设计问题。你有一个容器(Position
)有2个对象(Coordinates
和Rectangle
),你希望其中一个知道另一个。也就是说,矩形应该知道其位置的坐标。
这里有一些方法,根据更大的图片,一个可能比其他方法更好。 James_D在comment中提到了一对夫妇。
rectangle.getPosition().getCoordinates()
或.getPlayer()
。rectangle.getCoordinates()
。setUpRectangle
方法。如果矩形不需要从各个位置访问此数据,这非常有用,它是本地解决方案。然后在handle
方法中,您将返回传递给setUpRectangle
的坐标,但我们无法看到此方法所在的类。Map<Rectangle, Coordinates>
之类的内容,然后拨打map.get(rectangle)
。您可以在方法Coordinates getCoordinatesForRectangle(Rectangle rectangle)
中隐藏此地图,而不是直接调用它。 答案 1 :(得分:0)
您可以将此数据存储为userData
(或使用properties
,以防userData
保留给您的程序中的其他内容):
private final Rectangle rect;
public Position() {
rect = new Rectangle(RECTANGLE_SIZE, RECTANGLE_SIZE);
rect.setUserData(this);
}
rect.setOnMouseClicked((MouseEvent event) -> {
Position pos = (Position) ((Node) event.getSource()).getUserData();
...
});
您还可以使用了解位置的监听器:
class CoordinateAwareListener implements EventHandler<MouseEvent> {
private final int coordinateX;
private final int coordinateY;
public CoordinateAwareListener(int coordinateX, int coordinateY) {
this.coordinateX = coordinateX;
this.coordinateY = coordinateY;
}
@Override
public void handle(MouseEvent event) {
// do something with the coordinates
}
}