【发布时间】:2015-06-18 04:43:09
【问题描述】:
所以这里有一个问题。在每个TranslateTransition (tt) 之后,我想将Node 的位置更改为setX() 和setY(),然后将PauseTransition (pt) 更改一秒钟,然后重用@987654328 @来自新位置。但在tt 在新的所需位置运行之前,按钮会在一个奇怪的坐标处短暂闪烁——更具体地说,假设Node 最初放置在(0, 0) 和tt 将按钮向下移动100 个像素。在每个tt => pt 序列之后,Node 的位置通过在其先前的 x 坐标 (setX(getX() + 100)) 上添加 100 来更新 - 因此下一个位置是 (100, 0)。但在(100, 0) 开始tt 之前,它会短暂闪烁按钮(100, 100) - 经过一番调试后,我了解到这是因为在上一个tt.play() 的末尾,坐标从(0, 0)“移动”到(0, 100),因此当使用setX(getX() + 100) 时,它会将Node 放置在(100, 100) 并留在那里直到下一个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后,我想通过设置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() 都移动到 tt 和 pt 的 setOnFinished 块中,但它似乎没有生效。
所以我的问题是,在运行TranslateTransition 之后,有没有办法撤消它的效果,这样它就不会影响setX() 和setY() 操作?为了我的应用程序的目的,在半个周期后设置cycle(2) 和设置Node 不可见不是一个选项,因为我想添加其他取决于时间的功能。
【问题讨论】:
标签: javafx transition