Изменение продолжительности Java FX TranslateTransition - PullRequest
0 голосов
/ 19 мая 2019

Итак, я хочу иметь возможность изменять скорость моей анимации, изменяя продолжительность. Я знаю, что Java Docs говорит, что это невозможно, но я не вижу проблем с остановкой анимации, изменением Duration и началом с того места, где оно остановилось. С этой реализацией мой круг просто останавливается и больше не хочет двигаться. Могу ли я сделать это как-нибудь? Если я не могу, как я могу сделать анимацию с изменяемой скоростью?

EDIT: Это на самом деле работает, но когда я изменяю Длительность, то меняется начальная точка, а конечная точка - нет, поэтому она становится все ближе и ближе к конечной точке, пока не остановится (если только я не изменю скорость, когда круг близок к начальная отправная точка). Есть идеи для алгоритма, который будет влиять только на скорость анимации?

public void initialize() { 
          TranslateTransition transition = new TranslateTransition();
          transition.setDuration(Duration.seconds(2));
          transition.setToX(162);
          transition.setToY(72);
          transition.setAutoReverse(true);
          transition.setCycleCount(TranslateTransition.INDEFINITE);
          transition.setNode(myCircle);
          transition.play();


        mySlider.valueProperty().addListener(new ChangeListener() {

            @Override
            public void changed(ObservableValue arg0, Object arg1, Object arg2) {

                transition.stop();
                Duration d = transition.getDuration();
                transition.setDuration(Duration.seconds(mySlider.getValue()));
                transition.playFrom(d);
                System.out.println(mySlider.getValue());

            }
        });
    }

1 Ответ

2 голосов
/ 19 мая 2019

РЕДАКТИРОВАТЬ: Это на самом деле работает, но когда я изменяю Длительность, то меняется начальная точка, а конечная точка не меняется, поэтому она становится все ближе и ближе к конечной точке, пока не остановится (если только я не изменюскорость, когда окружность близка к начальной начальной точке).

Поскольку вы не задаете начальное значение translateX и translateY, TranslateTransition получает текущие значения этих свойств ввремя перехода из остановленного состояния в другое.Поскольку вы останавливаете переход, это происходит при каждом изменении ползунка.В это время значение свойств перевода может отличаться от начальной позиции.
Кроме того, время, которое вы передаете методу playFrom, может быть после окончания цикла, если вы уменьшите значение ползунка продолжительности.

Я рекомендую изменить свойство rate вместо:

TranslateTransition transition = new TranslateTransition();
transition.setDuration(Duration.seconds(1));
...

transition.rateProperty().bind(Bindings.divide(1d, mySlider.valueProperty()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...