增加JavaFX中Circle的hitbox

时间:2018-05-15 14:26:00

标签: java javafx

我创建了大小为5的圈子,其中包含Circle c = new Circle(x, y, 5);。然后我做c.setOnMousePressed(mousePressedEventHandler);但我在这里遇到了问题:我的圈子太小而且容易错过它。我想保持这个大小,所以有没有办法增加一个圆圈的命中框而不做一些更大的东西,比如创建一个更大的隐形圆圈,然后在其上设置清单?

1 个答案:

答案 0 :(得分:2)

通过向圆圈添加透明笔划来增加命中区域。

注意:要实际使用点击,您需要将pickOnBounds属性设置为true

private static Circle createCircle(double x, double y, double radius, double hitRadius) {
    Circle circle = new Circle(x, y, radius, Color.BLACK);
    circle.setStrokeType(StrokeType.OUTSIDE);
    circle.setStroke(Color.TRANSPARENT);
    circle.setStrokeWidth((hitRadius < radius) ? 0 : (hitRadius - radius));
    return circle;
}

@Override
public void start(Stage primaryStage) {
    Pane root = new Pane();
    Circle circle1 = createCircle(100, 100, 5, 20);
    Circle circle2 = createCircle(150, 150, 5, 20);

    circle1.setOnMouseClicked(evt -> System.out.println("clicked 1"));
    circle2.setOnMouseClicked(evt -> System.out.println("clicked 2"));

    root.getChildren().addAll(
            circle1,
            circle2
    );

    Scene scene = new Scene(root, 400, 400);

    primaryStage.setScene(scene);
    primaryStage.setResizable(false);
    primaryStage.show();
}