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

标签 java javafx

您好,是否可以减慢时间线的速度? 我的意思是我们可以操纵关键帧持续时间。

我想实现轮盘赌开始快速旋转然后减慢的效果。

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

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

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 循环中通过法令线程 sleep 来执行此操作? 然后观察它并在任何时候使用?

最佳答案

您可以构建一个 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();

关于java - 如何减慢时间轴关键帧持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47885029/

相关文章:

java - 此处不允许使用 Maven Jetty 插件守护程序元素

Java Servlets - 在 web.xml 中存储值列表(单个参数名称的多个参数值)

css - 无法在 JavaFX 组合框中自定义文本填充

java - en_EN 是有效的语言环境吗

java - 尝试向 JavaFX 中的 VBox 添加按钮

java - 获取表格:options value in AJAX

java - 未提交声明性 Spring 交易

java - 单步执行多个线程

java - TableView JavaFX 应用程序线程“java.lang.NullPointerException

java - 有没有办法将 ObservableList 绑定(bind)到 ObservableMap?