2017-12-19 6 views
0

HI ist es möglich, die Timeline-Ticks zu verlangsamen? Ich meine, können wir die Keyframe-Dauer manipulieren.Verlangsamen der Timeline-Keyframe-Dauer

Ich möchte den Effekt von Roulette erreichen, wenn es beginnt, schnell zu drehen und zu verlangsamen.

Der Keyframe wird jedoch einmal erstellt und zur Timeline hinzugefügt.

Mein Code sieht im Moment so aus.

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(); 
     }); 

oder sollte ich es einfach in der for-Schleife mit decriting thread Schlaf tun? Und dann beobachten Sie es und verwenden wann?

Antwort

1

Sie können eine Liste von KeyFrame s erstellen, sie alle zur Timeline hinzufügen und dann die Timeline einmal abspielen. Das Folgende entspricht dem, was Sie zu implementieren versucht haben: Beachten Sie, dass es 10 * 100 * 101/2 = 50500 Millisekunden (50,5 Sekunden) dauert, um den Würfel zu rollen, der wahrscheinlich ein wenig zu lang ist, also möchten Sie vielleicht einige der Werte in diesem anpassen.

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

Danke, James, funktioniert wie ein Charme. – LazerBanana