如何在 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
.
内的真实位置
我正在尝试检测 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
.