【问题标题】:How to make the javafx animation using path transition smooth?如何使用路径过渡平滑 javafx 动画?
【发布时间】:2020-10-08 13:51:34
【问题描述】:

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

这是我现在拥有的:

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();
        }
    }

【问题讨论】:

    标签: java animation javafx


    【解决方案1】:

    动画需要@9​​87654321@。

    来自文档,插值器

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

    默认插值器设置为 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();
    

    【讨论】:

    • 哇,太有帮助了!!!非常感谢您提供这些信息!
    猜你喜欢
    • 2018-02-17
    • 2015-05-07
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    相关资源
    最近更新 更多