スポンサーリンク

| キーワード:

JavaFXでタイマー ( Timeline )

JavaFXでタイマーを使う。

タイマー処理はanimation関数の中だけ。

Timeline t = new Timeline( new KeyFrame ( 間隔 , 処理内容 ) );

 

 

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Group;
import javafx.scene.shape.Box;
import javafx.geometry.Point3D;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.PerspectiveCamera;

//タイマー用のimport
import javafx.animation.Timeline;
import javafx.animation.KeyFrame;
import javafx.util.Duration;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;


public class jfx3d_anime extends Application {

    int i;
    Timeline timeline;
    
    void animation(Box box){
        
        //3D表示に関する記述
        Point3D p3 = new Point3D(1,1,0);
        p3.normalize();
        box.setRotationAxis( p3 );
        
        //タイマーの定義
        timeline = new Timeline(
            new KeyFrame(
                new Duration(25),//25ミリ秒
                new EventHandler<ActionEvent>(){
                    @Override
                    public void handle(ActionEvent event){
                        //ここに処理を記述
                        i+=1;
                        box.setRotate(i);
                    }
                }
            )
        );
        
        //タイマーの開始
        timeline.setCycleCount(Timeline.INDEFINITE);
        timeline.play();
    }
    
    
    
    @Override
    public void start(Stage stage) {
        Group root = new Group();
        
        // 辺の長さが20の立方体
        Box box = new Box(20, 20, 20);
        
        //回転軸を定義
        Point3D rotaxis = new Point3D(0.0, 1.0, 1.0);
        rotaxis.normalize();
        
        //立方体に回転軸と回転角を設定
        box.setRotationAxis( rotaxis );
        box.setRotate(45.0);
        
        root.getChildren().add(box);

        //ウィンドウのサイズを指定
        Scene scene = new Scene(root, 600, 600);
        
        //背景色を指定
        scene.setFill(Color.BLACK);
        
        // 透視投影カメラを設定
        PerspectiveCamera camera = new PerspectiveCamera(true);
        
        // カメラの位置を (0, 0, -100) にする
        camera.setTranslateZ(-100.0);
        
        //カメラが写す最近距離と最遠距離を指定
        camera.setFarClip(200);
        camera.setNearClip(50);
        
        scene.setCamera(camera);
        
        stage.setScene(scene);
        stage.setTitle("3Dサンプル");
        
        stage.show();
        
        
        animation(box);
    }

    public static void main(String... args) {
        launch(args);
    }
}

 

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: