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

如何在javafx中检测矩形和imageview对象之间的冲突,java,javafx,imageview,collision,rectangles,Java,Javafx,Imageview,Collision,Rectangles,我试图检测javafx中ImageView对象和矩形之间的冲突。下面的代码不起作用,我不知道为什么。当对象彼此重叠时,不会发生任何事情。图像的原始文件是png,如果这有区别的话。imageview对象使用箭头移动,矩形也使用TranslateTranslation移动 public void collision(ImageView a, Rectangle b) { if (a.getBoundsInLocal().intersects(b.getBoundsInLocal())) {

我试图检测javafx中ImageView对象和矩形之间的冲突。下面的代码不起作用,我不知道为什么。当对象彼此重叠时,不会发生任何事情。图像的原始文件是png,如果这有区别的话。imageview对象使用箭头移动,矩形也使用TranslateTranslation移动

public void collision(ImageView a, Rectangle b) {
    if (a.getBoundsInLocal().intersects(b.getBoundsInLocal())) {
        b.setY(-100);
        score++;
    }
}
图像视图移动代码:

    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);
            }
        }
    });

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

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


但是,我没有测试这是否会影响相交方法的结果。编辑:决定做更多的测试。将两个
矩形
s添加到
堆栈窗格
并移动其中一个,表明“本地”始终显示为真,“父级”仅在视觉相交时显示为真。这是因为,就“局部”而言,矩形从未离开其起始位置,这意味着它们在技术上始终相交。但是“在家长中”显示了他们在
StackPane

Hmm中的真实位置。。。我将其中一个矩形更改为
ImageView
,它仍然适用于我(我甚至使用了png文件)。即使看到你发布的新代码,我也没有做太多的改变。什么时候检查代码中的冲突?实际上我发现当窗口打开时,函数只被调用一次。不过,getBoundInParent()曾经为此工作过一次,谢谢。您知道如何让程序持续检查碰撞吗?我在start()方法中调用了该函数一次,您可以在不同的线程中连续签入while循环。我想我会使用
AnimationTimer
,因为它是在FX应用程序线程上调用的,并且每帧只调用一次。后一种方法有助于解决线程问题(例如在检测到冲突时更改GUI状态)。
    TranslateTransition tt = new TranslateTransition(Duration.seconds(4), rect2);
    tt.setByY(800f);
    tt.setCycleCount(INDEFINITE);
    tt.play();