2017-12-19 12 views
0

タイムラインのティックを遅くすることは可能ですか? 私は、キーフレームの期間を操作することができます。タイムラインのキーフレームの時間を遅くする方法

ルーレットがスピンして減速を開始すると効果が出たいと思います。

しかし、キーフレームは一度作成され、タイムラインに追加されます。

現時点では、私のコードは次のようになっています。

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

KeyFrameのリストを作成し、それらをすべてタイムラインに追加して、タイムラインを1回再生することができます。以下は実装しようとしたものと同じです:ダイをロールするには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(); 
+0

ありがとう、ジェームス、魅力的な作品。 – LazerBanana

関連する問題