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

时间:2017-04-11 23:01:27

标签: java javafx imageview collision rectangles

我试图在javafx中检测ImageView对象和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();

1 个答案:

答案 0 :(得分:1)

尝试使用getBoundsInParent()代替getBoundsInLocal()

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

但是,我没有测试这是否会影响交叉方法的结果。编辑:决定做更多的测试。向Rectangle添加两个StackPane并移动一个StackPane表示&#34; local&#34; 始终显示为真,并且&#34; in-parent&#34;仅在视觉上相交时才显示真实。这是因为,就本地而言,#34;关注的是,矩形从未离开过它们的起始位置,这意味着它们在任何时候都在技术上相交。但是&#34;在父母中&#34;在def retrieve(self, idx, dic=True): query = 'SELECT * FROM players WHERE idx = {idx}'.format(idx=idx) self.cr.execute(query) self.db.commit() records_tuples = self.cr.fetchall() if dic: columns_names = ['idx', 'name', 'passwd'] records_dicts = [dict(zip(columns_names, record_tuple)) for record_tuple in records_tuples] return records_dicts else: return records_tuples 中显示了他们的真实位置。