JavaFX-在TranslateTransition之后更改节点的位置
所以这里有一个问题。在每次JavaFX-在TranslateTransition之后更改节点的位置,javafx,transition,Javafx,Transition,所以这里有一个问题。在每次TranslateTransition(tt)之后,我想通过setX()和setY()更改节点的位置,然后暂停transition(pt)一秒钟,然后从新位置重新使用tt。但是在tt在新的所需位置运行之前,按钮会在一个奇怪的坐标处短暂闪烁-更具体地说,就是说节点最初放置在(0,0)处,并且tt会将按钮向下移动100像素。在每个tt=>pt序列之后,节点的位置会通过将100添加到其先前的x坐标(setX(getX()+100))进行更新,因此下一个位置是(100,0)。但
TranslateTransition
(tt
)之后,我想通过setX()
和setY()
更改节点的位置,然后暂停transition
(pt
)一秒钟,然后从新位置重新使用tt
。但是在tt
在新的所需位置运行之前,按钮会在一个奇怪的坐标处短暂闪烁-更具体地说,就是说节点最初放置在(0,0)
处,并且tt
会将按钮向下移动100像素。在每个tt
=>pt
序列之后,节点的位置会通过将100添加到其先前的x坐标(setX(getX()+100)
)进行更新,因此下一个位置是(100,0)
。但是在(100,0)
启动tt
之前,它会短暂地闪烁按钮(100,100)
-经过一些调试,我了解到这会发生,因为在上一次tt.play()
结束时,坐标从(0,0)
移动到(0,100)
,因此当setX(getX()+100)时使用时,它将节点放置在(100100)
处,并将其保留在那里,直到下一个tt.play()
,此时节点将自身正确地重新定位到(100,0)
详情:
我有一个节点
,更具体地说是图像视图
,其中加载了一个图像
,基本上充当屏幕上的移动按钮。我使用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);
这里,按钮
指的是图像视图
对象。执行TranslateTransition
后,我想通过设置按钮来清空屏幕。设置可见(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.setX(rand.nextInt(500))
其中random rand=new random()
我已尝试将更新行setX()
移动到tt
和pt
的setOnFinished
块中,但似乎没有生效
因此,我的问题是,在运行TranslateTransition
之后,是否有办法撤消其效果,从而不影响setX()
和setY()
操作?对于我的应用程序,设置循环(2)
并且在半个周期后设置节点
不可见不是一个选项,因为我想添加其他依赖于时间的功能。我了解到最好的做法是显式删除和添加节点
对象,而不是使用setVisible(布尔)
因此,当一个节点
对象应该从屏幕上消失时,应该通过root.getChildren().add(节点)完成代码>。同样,当节点
对象返回屏幕时,root.getChildren().remove(节点)应改为使用代码>。这种方法解决了已解决的问题
pt.setOnFinished((ActionEvent) -> {
button.setX(rand.nextInt(500));
button.setVisible(true);
updateButtons();
tt.play();
});