java - 在 JavaFX 中增加 Circle 的 hitbox
问题描述
我正在创建大小为 5 的圆圈,例如Circle c = new Circle(x, y, 5);
. 然后我做了,c.setOnMousePressed(mousePressedEventHandler);
但我有一个问题:我的圈子太小了,很容易错过它。我想保持这个大小,所以有没有办法增加一个圆圈的命中框而不做像创建一个更大的不可见圆圈然后设置监听器之类的事情?
解决方案
通过向圆圈添加透明笔触来增加命中区域。
注意:要实际使用命中框,您需要将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();
}
推荐阅读
- solr - dse solr 建议程序状态 403 - 未知命令“建议”
- javascript - 如何在多边形中打孔以在 Google 地图上以干净的颜色显示每个孔?
- c# - 如何在 foreach 循环 xamarin 表单中获取数据
- javascript - 我怎样才能动态创建一个数组?
- sql-server - 从 xmlblob 标头中检索数据
- spring - Spring AOP 不适用于 @Configuration 和 @EnableAspectJAutoProxy
- aws-fargate - 限制给定任务定义的并发 Fargate 任务数
- java - 用 println 分隔信息
- html - 当人们说静态文件是 .html、.js 等时,他们是否犯了错误?
- java - 我们如何在两个不同的进程中启动同一个 Java 类的两个实例?