Voici donc un problème. Après chaque TranslateTransition
(tt
), je voudrais changer l'emplacement du Node
par setX()
et setY()
, puis PauseTransition
(pt
) pour une seconde, et réutiliser le tt
du nouvel emplacement. Mais avant que le tt
s'exécute dans un nouvel emplacement désiré, le bouton clignote brièvement à une coordonnée bizarre - plus précisément, dire Node
a été initialement placé à (0, 0)
et tt
déplace le bouton vers le bas de 100 pixels. Après chaque séquence tt
=>pt
, l'emplacement de Node
se met à jour en ajoutant 100 à sa coordonnée x précédente (setX(getX() + 100)
) - l'emplacement suivant est donc (100, 0)
. Mais avant de commencer le tt
à (100, 0)
, il clignote brièvement sur le bouton (100, 100)
- après un certain effort de débogage, j'appris cela se produit parce qu'à la fin de précédente tt.play()
, la coordonnée « déplacé » (0, 0)
-(0, 100)
, et donc quand setX(getX() + 100)
est utilisé, il place le Node
à (100, 100)
et le laisse là jusqu'au prochain tt.play()
, à ce point le Node
se déplace correctement à (100, 0)
.JavaFX - Modification de l'emplacement d'un nœud après TranslateTransition
Détails:
J'ai un Node
, plus précisément ImageView
sur lequel une Image
est chargée essentiellement que agit comme un bouton en mouvement à l'écran. J'ai utilisé TranslateTransition
pour bouger autour du bouton.
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);
Ici, le button
fait référence à l'objet ImageView
. Après l'exécution du TranslateTransition
, je voudrais vider l'écran en définissant button.setVisible(false)
et garder un écran vide pendant 3 secondes. J'aurais les suivantes:
PauseTransition pt = new PauseTransition(Duration.seconds(3));
tt.setOnFinished((ActionEvent event) -> {
tt.stop(); // not really necessary though
button.setVisible(false);
pt.play();
});
Parce que je voulais que le modèle de bouton en mouvement => disparaît et pause => Bouton mouvement => disparais et une pause pour continuer, je laisse aussi tt
jeu quand pt
a terminé. Aussi pour mettre à jour l'emplacement du button
(nouvel emplacement aléatoire), j'ai inclus button.setX(rand.nextInt(500))
où Random rand = new Random()
.
pt.setOnFinished((ActionEvent) -> {
button.setX(rand.nextInt(500));
button.setVisible(true);
updateButtons();
tt.play();
});
J'ai essayé de déplacer la ligne de mise à jour setX()
à la fois dans la, il ne semble pas bloc setOnFinished
de tt
et pt
, mais pour prendre effet.
Donc, ma question est, après avoir exécuté un TranslateTransition
, est-il un moyen d'annuler son effet de sorte qu'il n'affecte pas les opérations setX()
et setY()
? Pour mon application, en réglant le cycle(2)
et en réglant le Node
invisible après avoir fait un demi-cycle n'est pas une option parce que je veux ajouter d'autres fonctionnalités qui dépendent de la synchronisation.