Ang*_*gom 2 javafx collision-detection javafx-2 javafx-8
我正在尝试检查StackPane内部节点上的冲突检测.以下是我的代码:
public void start(Stage primaryStage) throws Exception {
StackPane pane = new StackPane();
Scene scene = new Scene(pane,300,300,Color.GREEN);
primaryStage.setScene(scene);
primaryStage.show();
Rectangle rect1 = new Rectangle(50, 50);
rect1.setFill(Color.BLUE);
Rectangle rect2 = new Rectangle(50, 50);
pane.getChildren().add(rect1);
pane.getChildren().add(rect2);
TranslateTransition translateTransitionEnemyCar = new TranslateTransition();
translateTransitionEnemyCar.setDuration(Duration.millis(2000));
translateTransitionEnemyCar.setNode(rect2);
translateTransitionEnemyCar.setFromY(-150);
translateTransitionEnemyCar.setToY(150);
translateTransitionEnemyCar.setAutoReverse(true);
translateTransitionEnemyCar.setCycleCount(Timeline.INDEFINITE);
translateTransitionEnemyCar.play();
checkCollision(pane,rect1,rect2);
}
//Collision Detection
void checkCollision(StackPane pane, final Rectangle rect1, Rectangle rect2){
rect2.boundsInParentProperty().addListener(new ChangeListener<Bounds>() {
@Override
public void changed(ObservableValue<? extends Bounds> arg0,Bounds oldValue, Bounds newValue) {
if(rect1.intersects(newValue)){
System.out.println("Collide ============= Collide");
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
如果我使用AnchorPane,碰撞检测就可以了.但是使用StackPane我无法实现它.我想这是因为堆栈窗格的坐标系统(如果我错了,请纠正我).
所以请帮我实现上述两个矩形的碰撞检测.如果我想更改节点的坐标,请提供一些建议(如果您知道的话)在StackPane内的节点上实现此类冲突检测.
在测试条件下,将一个矩形的局部边界与另一个矩形的父节点的边界进行比较.您想要比较相同的边界类型.
所以改变:
rect1.intersects(newValue)
Run Code Online (Sandbox Code Playgroud)
至:
rect1.getBoundsInParent().intersects(newValue)
Run Code Online (Sandbox Code Playgroud)
要更好地理解边界类型,您可能希望使用此交集演示应用程序.
| 归档时间: |
|
| 查看次数: |
5347 次 |
| 最近记录: |