Анимация прыжка вперёд или назад

С помощью TranslateTransition попытался сделать элементарное движение влево, вправо, прыжок вверх. Проблема в том, что не знаю как осуществить анимацию прыжка вперёд или назад. Если нажать одновременно UP и RIGHT, разумеется, ничего не будет.

public class Game extends MainMenu {
    public AnimationTimer timer;
    public TranslateTransition translateTransition;
    boolean Repeat = true;
    public Rectangle rectangle = new Rectangle(100,718,100,50);
    public void Game() {
        rectangle.setFill(Color.rgb(10, 10, 10));
        GamePane.getChildren().addAll(rectangle);
        timer = new AnimationTimer() {
            @Override
            public void handle(long now) {
                GameScene.setOnKeyPressed(event -> {
                    switch (event.getCode()) {
                        case UP: case W: {
                           if (Repeat)
                             MoveUp();
                             break;
                        }
                        case LEFT: case A: {
                            MoveLeft();
                            break;
                        }
                        case RIGHT: case D: {
                            MoveRight();
                            break;
                        }
                        default: break;
                    }
                });
                System.out.println("X: " + rectangle.getTranslateX() + " Y: " + rectangle.getTranslateY());
            }
        };
       timer.start();
    }
    public void MoveUp() { // Jump
            Repeat = false;
            translateTransition = new TranslateTransition(Duration.seconds(0.3), rectangle);
            translateTransition.interpolatorProperty().set(Interpolator.SPLINE(0.1, 0.1, 0.7, 0.7));
            translateTransition.setByY(-200);
            translateTransition.setAutoReverse(true);
            translateTransition.setCycleCount(2);
            translateTransition.play();
            translateTransition.setOnFinished(event -> {Repeat = true; });
    }
    public void MoveLeft() { // Left
        translateTransition = new TranslateTransition(Duration.millis(20), rectangle);
        translateTransition.interpolatorProperty().set(Interpolator.SPLINE(0.1, 0.1, 0.7, 0.7));
        translateTransition.setByX(-15);
        translateTransition.play();
    }
    public void  MoveRight() { // Right
        translateTransition = new TranslateTransition(Duration.millis(20), rectangle);
        translateTransition.interpolatorProperty().set(Interpolator.SPLINE(0.1, 0.1, 0.7, 0.7));
        translateTransition.setByX(15);
        translateTransition.play();
    }
}

Ответы (0 шт):