Я делаю прототип игры, которую пытаюсь сделать с помощью JavaFX. Требуется, чтобы персонаж/спрайт двигался по изогнутой траектории вперед (в основном прыгал в определенную позицию вперед). Я попытался использовать MoveTo (используя значения layoutX и layoutY ImageView спрайта, жестко запрограммированные) с CubicCurveTo и ArcTo, чтобы указать этот путь, но затем спрайт прыгает и запускает анимацию из-под окна и просто выполняет анимация начинается с этой точки, хотя мой спрайт находится примерно в середине окна.
Я попытался установить для MoveTo значение 0, но затем спрайт переходит в немного другое положение рядом с его текущим положением (верхняя левая сторона спрайта), а затем выполняет анимацию до прошлого под окном. Насколько я понимаю, конечные координаты CubicCurveTo и ArcTo оставались одинаковыми независимо от того, где находится MoveTo.
Мой общий вопрос: как работают системы координат этих элементов пути? В частности, как мне заставить мой спрайт двигаться в изогнутом положении вперед, не прыгая ниже окна?
Вот мой код (это внутри метода initialize() класса контроллера моего FXML):
/*
The root is a Pane with prefWidth = 960, prefHeight = 540
*/
public void initialize() {
/*
char1 is the ImageView of the sprite. layoutX = 270, layoutY = 290
*/
char1.setScaleX(-1);
final Path path = new Path();
path.getElements().add(new MoveTo(0, 0));
// these are rough numbers, based on the coordinate system that the layoutX and layoutY of the ImageView uses
// path.getElements().add(new CubicCurveTo(300, 200, 400, 200, 500, 290));
path.getElements().add(new ArcTo(100, 60, 40, 500, 290, true, true));
final PathTransition pathTransition = new PathTransition();
pathTransition.setDuration(Duration.millis(2000));
pathTransition.setNode(char1);
pathTransition.setPath(path);
pathTransition.setCycleCount(1);
pathTransition.setAutoReverse(true);
jumpButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
pathTransition.play();
}
});
}