JavaFX 动画类'rate'属性的行为如何?



我有两个矩形形状,如下

    //First rectangle animation
    TranslateTransition translateTransition1 = new TranslateTransition();
    translateTransition1.setNode(rect1);
    translateTransition1.setFromX(10);
    translateTransition1.setFromY(0);
    translateTransition1.setToX(10);
    translateTransition1.setToY(300);
    translateTransition1.setCycleCount(8);
    //translateTransition.setAutoReverse(true);
    translateTransition1.play();
    translateTransition1.setRate(0.1);
    //Second rectangle animation
    TranslateTransition translateTransition2 = new TranslateTransition();
    translateTransition2.setNode(rect2);
    translateTransition2.setFromX(10);
    translateTransition2.setFromY(-300);  // This is the only difference
    translateTransition2.setToX(10);
    translateTransition2.setToY(300);
    translateTransition2.setCycleCount(8);
    //translateTransition.setAutoReverse(true);
    translateTransition2.play();
    translateTransition2.setRate(0.1);

在这里,这两个动画都有速率(0.1),但是当我运行应用程序时它们以不同的速度移动。

  • 根据Oracle文档,"速率"属性定义了动画的速度/方向,那么为什么即使我将其设置为0.1,这两个翻译人员也没有相同的速度?
  • 另外,"费率"属性的实际行为如何?

速率的定义

速率不是过渡中翻译对象的每秒像素的速度或速度。

想到这样的速度(由捉鬼敢死队的路易斯·塔利(Louis Tully)提供):

我看到你在锻炼。我也是我。

速率就像在视频记录器上的快速前进,慢动作或倒带功能。

速度的定义

我不想设置持续时间。我只希望两个矩形以相同的速度移动。

速度是随着时间的距离。

如果您希望矩形以相同的速度移动,请在相同持续时间内移动相同的距离。

您的示例代码问题

如果您不设置持续时间,将为您分配一个持续时间。默认持续时间为400毫秒,这可能不是您想要的。

您问题中的矩形正在以不同的速度移动,因为您已要求它们在同一时间范围内旅行不同的距离。

示例

好吧,您现在可能已经知道了,但是以防万一。

TranslateTransition translateTransition1 = new TranslateTransition(
  Duration.seconds(1), rect1
);
translateTransition1.setFromX(0);
translateTransition1.setToX(100);
translateTransition1.setInterpolator(Interpolator.LINEAR);
translateTransition1.play();
TranslateTransition translateTransition2 = new TranslateTransition(
  Duration.seconds(2), rect2
);
translateTransition2.setFromX(0);
translateTransition2.setToX(100);
translateTransition2.setInterpolator(Interpolator.LINEAR);
translateTransition2.play();
rect2.setTranslateY(200);

所以有两个矩形:

  • rect1在一秒钟内移动100像素的总距离,因此其旅行速度为每秒100像素。
  • rect2在两秒钟内移动100像素的总距离,因此其旅行速度为每秒50像素。

使用线性插装器,以便在恒定速度下发生过渡(例如,给定的矩形在移动时不会加速或减速)。

如果您希望两个矩形以相同的速度移动,则可以将第二个过渡的持续时间设置为一秒钟,因此它匹配了第一个过渡的持续时间(它们的距离已经匹配了)。

另外,如果您调用translateTransition2.setRate(2),则第二个动画将播放两倍,从而完成一半的持续时间。这将使旅行速度从每秒50像素到每秒100像素,与第一个矩形的速度匹配。

最新更新