如何在 javafx 中检测矩形和 imageview 对象之间的碰撞

How to detect collision in javafx between rectangle and imageview object

我正在尝试检测 ImageView 对象和 javafx 中的 Rectangle 之间的冲突。下面的代码不起作用,我不确定为什么。当对象相互重叠时,什么也不会发生。如果有所不同,图像的原始文件是 png。 imageview 对象随着箭头移动,矩形也随着 TranslateTranslation 移动。

public void collision(ImageView a, Rectangle b) {
    if (a.getBoundsInLocal().intersects(b.getBoundsInLocal())) {
        b.setY(-100);
        score++;
    }
}

imageview 移动代码:

    playg.setOnKeyPressed(new EventHandler<KeyEvent>(){
        public void handle(KeyEvent event) {
            if(event.getCode() == KeyCode.RIGHT) {
                basket.setLayoutX(basket.getLayoutX() + 15);
                brect.setLayoutX(basket.getLayoutX() + 15);

            } else if (event.getCode() == KeyCode.LEFT) {
                basket.setLayoutX(basket.getLayoutX() - 15);
                brect.setLayoutX(basket.getLayoutX() - 15);
            }
        }
    });

矩形动画代码:

    TranslateTransition tt = new TranslateTransition(Duration.seconds(4), rect2);
    tt.setByY(800f);
    tt.setCycleCount(INDEFINITE);
    tt.play();

尝试使用 getBoundsInParent() 而不是 getBoundsInLocal()

一些快速测试表明,BoundingBox 在使用本地时在两个不同位置之间没有变化,但在使用父级时却发生了变化。我猜这是因为 getBoundsInParent() 在节点上使用了转换(有关更多信息,请参阅两者之间的 Javadoc)。

但是,我没有测试这是否会影响相交方法的结果。 编辑:决定进行更多测试。将两个 Rectangle 添加到 StackPane 并移动一个显示 "local" always 显示 true 而 "in-parent" 仅在视觉上显示 true相交。这是因为,就 "local" 而言,矩形从未离开它们的起始位置,这意味着它们在技术上始终相交。但是 "in-parent" 显示了他们在 StackPane.

内的真实位置