如何为多个节点设置动画并在每个节点之间暂停?
How to animate several nodes with pause between each one?
我试图在一个循环中一个接一个地为一系列节点制作动画。目标是让第一个节点开始其动画,然后在下一个节点开始动画之前短暂暂停。
但是,当 运行 在一个循环中执行此操作时,它执行得太快并且所有节点似乎都在同时进行动画处理。
为简单起见,我使用 AnimateFX 库来处理动画,但我假设此处所需的功能适用于其他情况?
如何在每个 HBox 动画之间添加暂停?
import animatefx.animation.Bounce;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class AnimationTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
final VBox root = new VBox(10);
root.setAlignment(Pos.CENTER);
final HBox tiles = new HBox(5);
tiles.setAlignment(Pos.CENTER);
// Create 5 tiles
for (int i = 0; i < 5; i++) {
HBox tile = new HBox();
tile.setPrefSize(50, 50);
tile.setStyle("-fx-border-color: black; -fx-background-color: lightblue");
tiles.getChildren().add(tile);
}
Button button = new Button("Animate");
button.setOnAction(event -> {
// Animate each tile, one at a time
for (Node child : tiles.getChildren()) {
Bounce animation = new Bounce(child);
animation.play();
}
});
root.getChildren().add(tiles);
root.getChildren().add(button);
primaryStage.setWidth(500);
primaryStage.setHeight(200);
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
}
我不知道 AnimateFX,但使用标准库可以将动画添加到 SequentialTransition
。
例如,要为每个节点设置动画但从稍后开始,请将持续时间增加的 PauseTransition
s 和所需的动画添加到 SequentialTransition
s,然后播放 SequentialTransition
s .
正如我所说,我不熟悉您使用的库,但我认为它看起来像这样:
Button button = new Button("Animate");
button.setOnAction(event -> {
Duration offset = Duration.millis(500);
Duration start = new Duration();
// Animate each tile, one at a time
for (Node child : tiles.getChildren()) {
Bounce bounce = new Bounce(child);
PauseTransition delay = new PauseTransition(start);
SequentialTransition animation = new SequentialTransition(delay, bounce.getTimeline());
animation.play();
start = start.add(offset);
}
});
我试图在一个循环中一个接一个地为一系列节点制作动画。目标是让第一个节点开始其动画,然后在下一个节点开始动画之前短暂暂停。
但是,当 运行 在一个循环中执行此操作时,它执行得太快并且所有节点似乎都在同时进行动画处理。
为简单起见,我使用 AnimateFX 库来处理动画,但我假设此处所需的功能适用于其他情况?
如何在每个 HBox 动画之间添加暂停?
import animatefx.animation.Bounce;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class AnimationTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
final VBox root = new VBox(10);
root.setAlignment(Pos.CENTER);
final HBox tiles = new HBox(5);
tiles.setAlignment(Pos.CENTER);
// Create 5 tiles
for (int i = 0; i < 5; i++) {
HBox tile = new HBox();
tile.setPrefSize(50, 50);
tile.setStyle("-fx-border-color: black; -fx-background-color: lightblue");
tiles.getChildren().add(tile);
}
Button button = new Button("Animate");
button.setOnAction(event -> {
// Animate each tile, one at a time
for (Node child : tiles.getChildren()) {
Bounce animation = new Bounce(child);
animation.play();
}
});
root.getChildren().add(tiles);
root.getChildren().add(button);
primaryStage.setWidth(500);
primaryStage.setHeight(200);
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
}
我不知道 AnimateFX,但使用标准库可以将动画添加到 SequentialTransition
。
例如,要为每个节点设置动画但从稍后开始,请将持续时间增加的 PauseTransition
s 和所需的动画添加到 SequentialTransition
s,然后播放 SequentialTransition
s .
正如我所说,我不熟悉您使用的库,但我认为它看起来像这样:
Button button = new Button("Animate");
button.setOnAction(event -> {
Duration offset = Duration.millis(500);
Duration start = new Duration();
// Animate each tile, one at a time
for (Node child : tiles.getChildren()) {
Bounce bounce = new Bounce(child);
PauseTransition delay = new PauseTransition(start);
SequentialTransition animation = new SequentialTransition(delay, bounce.getTimeline());
animation.play();
start = start.add(offset);
}
});