JavaFX - 在TranslateTransition之后更改节点的位置

时间:2015-04-20 21:44:15

标签: javafx transition

所以这是一个问题。在每个TranslateTransitiontt)之后,我想更改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() setOnFinishedtt的{​​{1}}块中,但似乎没有生效。

所以我的问题是,在运行pt之后,有没有办法撤消其效果,因此它不会影响TranslateTransitionsetX()操作?出于我的应用目的,设置setY()并在半个周期后将cycle(2)设置为不可见是不可取的,因为我想添加其他依赖于时间的功能。

1 个答案:

答案 0 :(得分:1)

我了解到明确removeadd Node个对象是最佳做法,而不是通过setVisible(boolean)更改其可见性。

因此当Node对象从屏幕上消失时,应该通过root.getChildren().add(node);完成。同样,当Node个对象返回到屏幕上时,应该使用root.getChildren().remove(node);。这种方法解决了已解决的问题。