0

我在 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 属性中,为什么我仍然需要它们……</p>

4

1 回答 1

0

要完成该任务,您可以在 100 毫秒后删除矩形。与 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();
}
于 2013-02-08T07:39:19.130 回答