2

画面の周りで長方形を動かして円に変換しようとする単純なアニメーションを作成しています。

形状は変化しますが、長方形は移動しません。KeyFrameアニメーションのとを再確認しましたKeyValuesが、理解できないようです。

SSCCE :

package anim;

import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;

import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.animation.TimelineBuilder;
import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.SceneBuilder;
import javafx.scene.effect.Reflection;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.StackPaneBuilder;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.RectangleBuilder;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.util.Duration;

public class AroundTheScreen extends Application{

    GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();

    int screenWidth = gd.getDisplayMode().getWidth();
    int screenHeight = gd.getDisplayMode().getHeight();

    int rectWidth = screenWidth / 6;
    int rectHeight = screenHeight / 6;

    Rectangle rectangle;
    Timeline animation;
    Scene theScene;

    KeyFrame topRight;
    KeyFrame botRight;
    KeyFrame botLeft;
    KeyFrame topLeft;

    StackPane pane;

    DoubleProperty movableX = new SimpleDoubleProperty(0.0);
    DoubleProperty movableY = new SimpleDoubleProperty(0.0);
    DoubleProperty arcHt =  new SimpleDoubleProperty(0.0);
    DoubleProperty arcWd = new SimpleDoubleProperty(0.0);

    @Override
    public void start(Stage stage) throws Exception {
        pane = StackPaneBuilder
                .create()
                .alignment(Pos.TOP_LEFT)
                .build();

        theScene = SceneBuilder
                    .create()
                    .width(screenWidth)
                    .height(screenHeight)
                    .root(pane)
                    .build();

        rectangle = RectangleBuilder
                    .create()
                    .width(rectWidth)
                    .height(rectHeight)
                    .fill(Color.rgb(128, 128, 128, 0.5))
                    .effect(new Reflection())
                    .build();

        rectangle.xProperty().bind(movableX);
        rectangle.yProperty().bind(movableY);
        rectangle.arcWidthProperty().bind(arcWd);
        rectangle.arcHeightProperty().bind(arcHt);

        topRight = new KeyFrame(new Duration(2000),
                                new KeyValue(arcWd,rectangle.getWidth()),
                                new KeyValue(arcHt,rectangle.getHeight()),
                                new KeyValue(movableX,screenWidth));

        botRight = new KeyFrame(new Duration(4000),
                                new KeyValue(arcWd,rectangle.getWidth()),
                                new KeyValue(arcHt,rectangle.getHeight()),
                                new KeyValue(movableY,screenHeight));

        botLeft = new KeyFrame(new Duration(6000),
                               new KeyValue(arcWd,rectangle.getWidth()),
                               new KeyValue(arcHt,rectangle.getHeight()),
                               new KeyValue(movableX,screenWidth));


        topLeft = new KeyFrame(new Duration(8000),
                   new KeyValue(arcWd,0),
                   new KeyValue(arcHt,0),
                   new KeyValue(movableX, 0),
                   new KeyValue(movableY, 0));


        animation = TimelineBuilder
                .create()
                .keyFrames(
                        topRight,
                        botRight,
                        botLeft,
                        topLeft
                        )
                .cycleCount(Timeline.INDEFINITE)
                .autoReverse(true)
                .build();

        pane.getChildren().add(rectangle);

        stage.setScene(theScene);
        stage.sizeToScene();
        stage.initStyle(StageStyle.TRANSPARENT);
        theScene.setFill(Color.TRANSPARENT);

        stage.show();
        animation.play();
    }
    public static void main(String[] args) {
        Application.launch("anim.AroundTheScreen");
    }
}  

を使用してアニメーション化するのを手伝ってくださいTimeline

4

1 に答える 1

3

すべてのコンテンツをペインの中央に自動的に再配置するStackPane長方形配置します。xPropertyしたがって、 antに対するすべての変更yPropertyは無視されます。

Pane代わりに使用してください。

于 2013-10-19T17:52:45.587 に答える