如何使用路径过渡使javafx动画平滑?



我现在的目标是制作一个小圆圈的动画,沿着一个大圆圈的路径前进。将来,我需要使用滑块动态更改旋转速度,但现在这不是问题。我不知道如何使这个动画流畅?我的意思是,我希望我的小圆圈在动画结束时不会变慢。使用路径转换可以做到这一点吗?还是我应该使用其他方法来实现动画以使其流畅?

这是我现在所拥有的:

import javafx.animation.*;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;
import javafx.util.Duration;
public class SpinningCircles extends Application {
BorderPane root = new BorderPane();
int BigCircRad = 200;
int BigCircX = 750;
int BigCircY = 400;
double duration = 1;
public static void main(String[] args) {
launch();
}
@Override
public void start(Stage stage){
Circle cir1 = new Circle(BigCircRad);
Circle cir2 = new Circle(BigCircRad/10);
cir1.setFill(Color.WHITE);
cir2.setFill(Color.WHITE);
cir1.setStroke(Color.BLUE);
cir2.setStroke(Color.BLUE);
cir1.setStrokeWidth(4);
cir2.setStrokeWidth(4);
cir1.setCenterX(BigCircX);
cir2.setCenterX(BigCircX);
cir1.setCenterY(BigCircY);
cir2.setCenterY(BigCircY-BigCircRad);
PathTransition pt = new PathTransition();
pt.setNode(cir2);
pt.setDuration(Duration.seconds(duration));
pt.setPath(cir1);
pt.setDelay(Duration.seconds(1));
pt.setCycleCount(Animation.INDEFINITE);
pt.play();
root.getChildren().addAll(cir1, cir2);
Scene scene = new Scene(root, 1000, 500);
stage.setScene(scene);
stage.setTitle("Spinning circles");
stage.setMaximized(true);
stage.setFullScreen(true);
stage.show();
}
}

您需要为动画设置插值器。

从文档中,插值器

控制每个加速和减速的时间 过渡周期。

默认插值器设置为 Interpolator.EASE_BOTH。

默认值Interpolator.EASE_BOTH

将使动画开始变慢,然后在最后加速并再次减速,所有这些都以平滑的方式进行。

请改用LINEAR插值器:

pt.setInterpolator(Interpolator.LINEAR);

请注意,必须在动画开始之前设置插值器:

PathTransition pt = new PathTransition();
pt.setNode(cir2);
pt.setDuration(Duration.seconds(duration));
pt.setPath(cir1);
pt.setDelay(Duration.seconds(1));
pt.setCycleCount(Animation.INDEFINITE);
pt.setInterpolator(Interpolator.LINEAR);
pt.play();

最新更新