gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:26:51 30 4
gpt4 key购买 nike

我正在尝试检测 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视觉上相交。这是因为,就“局部”而言,矩形从未离开其起始位置,这意味着它们在技术上始终相交。但“in-parent”显示了它们在 StackPane 中的真实位置。

关于java - 如何检测javafx中矩形和imageview对象之间的碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43357577/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com