首页 > 解决方案 > 在 JavaFX 中增加 Circle 的 hitbox

问题描述

我正在创建大小为 5 的圆圈,例如Circle c = new Circle(x, y, 5);. 然后我做了,c.setOnMousePressed(mousePressedEventHandler);但我有一个问题:我的圈子太小了,很容易错过它。我想保持这个大小,所以有没有办法增加一个圆圈的命中框而不做像创建一个更大的不可见圆圈然后设置监听器之类的事情?

标签: javajavafx

解决方案


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

注意:要实际使用命中,您需要将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();
}

推荐阅读