Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何减慢时间轴关键帧的持续时间_Java_Javafx - Fatal编程技术网

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

Java 如何减慢时间轴关键帧的持续时间,java,javafx,Java,Javafx,嗨,有可能减慢时间线的滴答声吗? 我的意思是我们可以操纵关键帧的持续时间 我想达到轮盘赌的效果,当它开始快速旋转和减速 但关键帧只创建一次并添加到时间轴中 我的代码现在看起来像这样 button.setOnAction(event -> { tick = 0.01; roll.setText("0"); roll.setFont(new Font(72)); timeline = new

嗨,有可能减慢时间线的滴答声吗? 我的意思是我们可以操纵关键帧的持续时间

我想达到轮盘赌的效果,当它开始快速旋转和减速

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

我的代码现在看起来像这样

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循环中使用命令线程睡眠吗? 然后观察并随时使用?

您可以创建一个关键帧列表,将它们全部添加到时间线,然后只播放一次时间线。以下内容相当于您尝试实现的内容:请注意,滚动模具将需要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();

谢谢你,詹姆斯,工作很有魅力。