如何减慢时间轴关键帧持续时间

时间:2017-12-19 10:36:28

标签: java javafx

HI是否有可能减慢时间线滴答? 我的意思是我们可以操纵关键帧持续时间。

当轮盘开始快速旋转并减速时,我想达到轮盘赌的效果。

但关键帧只创建一次并添加到时间轴。

我的代码目前看起来像这样。

button.setOnAction(event -> {

            tick = 0.01;

            roll.setText("0");
            roll.setFont(new Font(72));

            timeline = new Timeline();
            timeline.setCycleCount(Timeline.INDEFINITE);

            final KeyFrame keyFrame = new KeyFrame(Duration.seconds(tick),
                    e -> {
                        randomNum = ThreadLocalRandom.current().nextInt(1, 66 + 1);

                        roll.setText(randomNum + "");
                        tick = tick + 0.01;
                        if (tick >= 1.0) timeline.stop();

                    });

            timeline.getKeyFrames().add(keyFrame);
            timeline.playFromStart();
        });

或者我应该在for循环中使用判断线程睡眠吗? 然后观察它并随时使用?

1 个答案:

答案 0 :(得分:1)

您可以构建KeyFrame的列表,将它们全部添加到时间轴,然后只播放一次时间轴。以下等同于您尝试实现的内容:请注意,掷骰子需要10 * 100 * 101 / 2 = 50500毫秒(50.5秒),这可能有点太长,因此您可能需要调整一些值此

Duration nextFrameTime = Duration.millis(10);
Timeline timeline = new Timeline();
for (Duration frameTimeIncrement = Duration.millis(10); 
     frameTimeIncrement.lessThan(Duration.seconds(1));
     frameTimeIncrement = frameTimeIncrement.add(Duration.millis(10))) {
    KeyFrame keyFrame = new KeyFrame(nextFrameTime, 
        e -> roll.setText(ThreadLocalRandom.current().nextInt(1, 66 + 1) + ""));
    timeline.getKeyFrames().add(keyFrame);
    nextFrameTime = nextFrameTime.add(frameTimeIncrement);
}
timeline.play();