我已经在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属性中,为什么我还需要那些......
答案 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();
}