所以这是一个问题。在每个TranslateTransition
(tt
)之后,我想更改Node
setX()
和setY()
的位置,然后PauseTransition
({ {1}})一秒钟,并重新使用新位置的pt
。但是,在tt
在新的所需位置运行之前,按钮会在一个奇怪的坐标处短暂闪烁 - 更具体地说,tt
最初位于Node
并且(0, 0)
移动按下100个像素的按钮。在每个tt
=>之后tt
序列,pt
的位置通过向其先前的x坐标(Node
)添加100来更新 - 因此下一个位置是setX(getX() + 100)
。但是在(100, 0)
开始tt
之前,它会短暂闪烁按钮(100, 0)
- 经过一些调试后,我才知道这是因为在上一个(100, 100)
结束时,协调从tt.play()
“移动”到(0, 0)
,因此在使用(0, 100)
时,它会将setX(getX() + 100)
放在Node
并将其留在那里直到下一个(100, 100)
{1}},此时tt.play()
正确地将自己重定位到Node
。
详细说明:
我有一个(100, 0)
,更具体地说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
清空屏幕并保持空屏幕3秒钟。我会有以下内容:
button.setVisible(false)
因为我想要移动按钮的模式=>消失并暂停=>移动按钮=>消失并暂停以继续,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
的{{1}}块中,但似乎没有生效。
所以我的问题是,在运行pt
之后,有没有办法撤消其效果,因此它不会影响TranslateTransition
和setX()
操作?出于我的应用目的,设置setY()
并在半个周期后将cycle(2)
设置为不可见是不可取的,因为我想添加其他依赖于时间的功能。
答案 0 :(得分:1)
我了解到明确remove
和add
Node
个对象是最佳做法,而不是通过setVisible(boolean)
更改其可见性。
因此当Node
对象从屏幕上消失时,应该通过root.getChildren().add(node);
完成。同样,当Node
个对象返回到屏幕上时,应该使用root.getChildren().remove(node);
。这种方法解决了已解决的问题。