JavaFX - 避免在六边形地图中回溯常见的六边形边

时间:2018-01-27 23:18:28

标签: javafx

private void addHexagonsToScreen() {
    for(Hex hex : map.getMap()) {
        Point[] corners = screen.polygonCorners(hex);
        int i = 0;
        Double[] points = new Double[12];
        for(Point point : corners) {
            points[i] = point.getX();
            points[i+1] = point.getY();
            i += 2;
        }
        this.root.getChildren().add(drawHexagon(points));
    }
}

private Polygon drawHexagon(Double[] points) {

    Polygon polygon = new Polygon();
    polygon.getPoints().addAll(points);
    polygon.setStroke(Color.BLACK);
    polygon.setFill(Color.TRANSPARENT);
    return polygon;
}

这是我定义point

的方法
public class Point {

private final double x, y;

public Point(double x, double y) {
    this.x = x;
    this.y = y;
}

/**
 * @return the screen x-coordinate.
 */
public double getX() {
    return x;
}

/**
 * @return the screen y-coordinate.
 */
public double getY() {
    return y;
} }

Hex Map

这是我在Pane对象上绘制六边形的方法。正如您在下图中所看到的,我相当确定大多数线实际上都在被回扫,因为每个边(外边缘除外)显然是两个六边形共有的。为了解决这个问题,我改为一次计算所有点,然后将其作为Polygon()传递到double []函数中,目的是只绘制一个多边形而不是多个。

private void addHexagonsToScreen() {
    int i = 0;
    Double[] points = new Double[map.getMap().size() * 12];
    for(Hex hex : map.getMap()) {
        Point[] corners = screen.polygonCorners(hex);
        for(Point point : corners) {
            points[i] = point.getX();
            points[i+1] = point.getY();
            i += 2;
        }           
    }
    this.root.getChildren().add(drawHexagon(points));
}

这导致了第二张照片。我认为解决方案要求我指定"只将每个点连接到最近的其他点",但我不确定如何执行此操作。我的问题有一个简单的解决方案吗?

Hex Map 2

十六进制地图在左上角关闭的原因是因为我将我的十六进制地图的原点指定为0,0并计算像素位置。显然我在将我的0,0六边形位置转换为与Pane的中心对应并且在向上方向上增长Y +而在向右方向上增长X +时做错了。

0 个答案:

没有答案