Мне трудно понять, почему этот код работает, когда центр круга установлен на (0, 0), а не с другими координатами:
public class Test extends Application {
@Override
public void start(Stage stage) {
Pane canvas=new Pane();
Scene scene = new Scene(canvas, 800, 600);
Circle ball = new Circle();
ball.setRadius(20);
ball.setFill(Color.RED);
canvas.getChildren().add(ball);
stage.setTitle("Bouncing ball");
stage.setScene(scene);
stage.show();
Timeline timeline = new Timeline(new KeyFrame(Duration.millis(10),
new EventHandler<ActionEvent>() {
double dx =3;
double dy = 4;
@Override
public void handle(ActionEvent t) {
//move the ball
ball.setLayoutX(ball.getLayoutX() + dx);
System.out.println(ball.getLayoutX());
ball.setLayoutY( ball.getLayoutY() + dy);
Bounds bounds = canvas.getBoundsInLocal();
if(( ball.getLayoutY() >= (bounds.getMaxY() - ball.getRadius()))){
System.out.println("made it in");
dy = -dy;
}
}
}));
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.play();
}
public static void main(String[] args) {
launch(args);
}
}
Любое понимание того, почему мяч отскакивает от нижней стенки, как и ожидалось, когда мяч начинается с (0, 0), и просто улетает, когда это не так, будет очень цениться!