【问题标题】:JavaFX - Changing location of a Node after TranslateTransitionJavaFX - 在 TranslateTransition 之后更改节点的位置
【发布时间】: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();
});

因为我想要移动按钮 => 消失并暂停 => 移动按钮 => 消失并暂停以继续的模式,所以我也让ttpt 完成后播放。此外,为了更新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() 都移动到 ttptsetOnFinished 块中,但它似乎没有生效。

所以我的问题是,在运行TranslateTransition 之后,有没有办法撤消它的效果,这样它就不会影响setX()setY() 操作?为了我的应用程序的目的,在半个周期后设置cycle(2) 和设置Node 不可见不是一个选项,因为我想添加其他取决于时间的功能。

【问题讨论】:

    标签: javafx transition


    【解决方案1】:

    我了解到,最好将 removeadd 显式指定为 Node 对象,而不是使用 setVisible(boolean) 更改它们的可见性。

    所以当Node 对象应该从屏幕上消失时,应该通过root.getChildren().add(node); 来完成。同样,当Node 对象重新出现在屏幕上时,应使用root.getChildren().remove(node); 代替。这种方法解决了已解决的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多