Так вот проблема. После каждого TranslateTransition
(tt
), я хотел бы изменить расположение Node
по setX()
и setY()
, затем PauseTransition
(pt
) для второй, и повторно использовать tt
из нового местоположения. Но до того, как tt
будет работать в новом желаемом месте, кнопка кратковременно мигает на странной координате - точнее, Node
был первоначально размещен на (0, 0)
, а tt
перемещает кнопку на 100 пикселей. После каждой последовательности tt
=>pt
местоположение Node
обновляется путем добавления 100 к предыдущей координате x (setX(getX() + 100)
) - следующее местоположение, следовательно, (100, 0)
. Но прежде, чем начать tt
на (100, 0)
, он коротко вспыхивает кнопку (100, 100)
- после некоторых усилий для отладки, я узнал, это происходит потому, что в конце предыдущего tt.play()
, координата «переехал» из (0, 0)
в (0, 100)
, и, следовательно, когда setX(getX() + 100)
используется, он помещает Node
в (100, 100)
и оставляет его там до следующего tt.play()
, после чего Node
правильно переместится на (100, 0)
.JavaFX - Изменение местоположения узла после TranslateTransition
Детали:
Я в Node
, более конкретно ImageView
на котором Image
загружается, что в основном действует как скользящее кнопку на экране. Я использовал TranslateTransition
для перемещения по кнопке.
TranslateTransition tt = new TranslateTransition();
tt = new TranslateTransition(Duration.seconds(5), button);
tt.setFromX(0);
tt.setFromY(0);
tt.setByX(0);
tt.setByY(100); // shifts the button down by 100 pixels
tt.setAutoReverse(true);
Здесь button
относится к ImageView
объекта. После выполнения TranslateTransition
я хотел бы очистить экран, установив button.setVisible(false)
и сохранить пустой экран в течение 3 секунд. Я бы следующее:
PauseTransition pt = new PauseTransition(Duration.seconds(3));
tt.setOnFinished((ActionEvent event) -> {
tt.stop(); // not really necessary though
button.setVisible(false);
pt.play();
});
Потому что я хотел шаблон кнопки перемещения => исчезает и пауза => скользящую кнопку => исчезают, и сделать паузу, чтобы продолжить, я также позволить tt
игру, когда pt
закончил. Также для обновления местоположения button
(новое случайное местоположение) я включил button.setX(rand.nextInt(500))
, где Random rand = new Random()
.
pt.setOnFinished((ActionEvent) -> {
button.setX(rand.nextInt(500));
button.setVisible(true);
updateButtons();
tt.play();
});
Я попытался переместить обновление линии setX()
как в setOnFinished
блок tt
и pt
, но это, кажется, не вступил в силу.
Так что мой вопрос: после запуска TranslateTransition
есть ли способ отменить его действие, чтобы он не влиял на операции setX()
и setY()
? Для этой цели мое приложение, установив cycle(2)
и установив Node
невидимым после половины цикла, не является вариантом, потому что я хочу добавить другие функции, зависящие от времени.