2017-04-01 6 views
0

私はスクロールバックグラウンドを作ろうとしています。希望はそれを末尾に接続することで同じ「リボン」を回転させ、私はゲームの後ろに配置します。JavaFXアニメーションスロー動画

私はこれをアニメーション化するための正しい方法を模索してきました。私は私の例やTimeLineのようにAnimationTimerを使うことができます。しかし、アニメーションの速度をずっと遅くしたいと思っています。タイマーの更新を遅らせると、動きが遅くなります。私はint変数を追加しましたが、 "x"ミリ秒未満であれば返りますが、それは良く見えませんでした。

このタスクを実行するより良い方法はありますか?ハンドルに追加しました

import javafx.animation.AnimationTimer; 
import javafx.scene.canvas.Canvas; 
import javafx.scene.canvas.GraphicsContext; 
import javafx.scene.image.Image; 
import javafx.scene.layout.*; 
import java.io.File; 
import java.nio.file.Path; 
import java.nio.file.Paths; 

class ImageContainer extends VBox { 
    int w, h; 
    int sectionScrollWidth = 1; 
    int sections; 
    int sectionCounter = 0; 
    Image image; 
    Canvas canvas; 

public ImageContainer() { 
    setVisible(true); 
    load(); 
    w = (int) image.getWidth(); 
    h = (int) image.getHeight(); 
    canvas = new Canvas(w, h); 
    getChildren().add(canvas); 
    sections = w/sectionScrollWidth; 
    GraphicsContext gc = canvas.getGraphicsContext2D(); 
    canvas.setVisible(true); 
    gc.drawImage(image, 0, 0, w, h); 
    setPrefSize(w, h); 

    final long startNanoTime = System.nanoTime(); 

    new AnimationTimer() { 
     public void handle(long currentNanoTime) { 
      sectionCounter = sectionCounter - sectionScrollWidth; 
      canvas.setTranslateX(sectionCounter); 
     } 
    }.start(); 

//  KeyValue kv1 = new KeyValue(canvas.translateXProperty(), 0); 
//  KeyValue kv2 = new KeyValue(canvas.translateXProperty(), 2000); 
//  KeyFrame kf1 = new KeyFrame(Duration.millis(3000), kv1, kv2); 
//  Timeline translate = new Timeline(); 
//  translate.getKeyFrames().add(kf1); 
//  translate.play(); 

} 

public void load() { 
    Path imagePath = Paths.get("./src/main/resources/ribbonImages/clouds.png"); 
    File f = imagePath.toFile(); 
    assert f.exists(); 
    image = new Image(f.toURI().toString()); 
} 
} 

答えて

0
if (((System.nanoTime()-startNanoTime)/1000000000.0)<0.05) { 
       return; 
      } 
      else { 
       startNanoTime = System.nanoTime(); 
      } 

()メソッドは、0.05未満秒が経過している場合に返すことを強制されます。かなり明白な答えですが、私は自分の質問を削除したくないのです。これが他の人に役立つ場合に備えて。