您好,是否可以减慢时间线的速度? 我的意思是我们可以操纵关键帧持续时间。
我想实现轮盘赌开始快速旋转然后减慢的效果。
但是关键帧创建一次并添加到时间轴中。
我的代码现在看起来像这样。
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/