一个简单的JavaFX 2.x动画任务

时间:2013-02-07 16:02:38

标签: javafx-2

我已经在FlashProfessional(CS 6)中完成了动画,顺便说一下(在不保存最后修改的情况下不断崩溃,生成大量文件,工作不一致等等)。我很难弄清楚如何在JavaFX 2.x中完成以下简单任务(可能是因为我的背景是在Flash中):一个矩形,存在于从t = 0到t = 100的恒定位置,之后它将从场景中删除。

在Flash中,我可以在t = 0处创建一个关键帧,我在其中绘制一个矩形。然后我在t = 100处创建第二个关键帧,其中矩形被删除。那么简单。

在JavaFX中,为什么我不能只写timeline.getKeyFrames().addAll(new KeyFrame(new Duration(100), new Rectangle(10, 10, 25, 25)));或类似。

请帮助我并提供代码。我迷失在这些KeyValues和Java属性中,为什么我还需要那些......

1 个答案:

答案 0 :(得分:0)

要完成该任务,您可以在100 ms后删除矩形。与Flash不同的JavaFX不是关于关键帧构建的 - 它们是可选功能,仅在您需要真实动画时使用,例如缩放对象。有关详细信息,请参阅下一个教程:http://docs.oracle.com/javafx/2/animations/jfxpub-animations.htm

并展示代码:

public void start(Stage primaryStage) {
    final Rectangle rect1 = new Rectangle(10, 70, 50, 50);
    final Rectangle rect2 = new Rectangle(10, 150, 50, 50);

    Button btn = new Button("Play");
    btn.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent t) {
            // this "timeline" just call a handler after 500 ms which hides rectangle
            TimelineBuilder.create().keyFrames(new KeyFrame(Duration.millis(500), new EventHandler<ActionEvent>() {

                @Override
                public void handle(ActionEvent t) {
                    rect1.setVisible(false);
                }
            })).build().play();

            // this timeline hides rectangle 2 with animation
            // changing scaleXProperty() from 1 (default) to 0
            TimelineBuilder.create().keyFrames(
                    new KeyFrame(
                        Duration.millis(500), 
                        new KeyValue(rect2.scaleXProperty(), 0))
                    ).build().play();
        }
    });

    Pane root = new Pane();
    root.getChildren().addAll(rect1, rect2, btn);

    Scene scene = new Scene(root, 300, 300);

    primaryStage.setScene(scene);
    primaryStage.show();
}