我正在使用 JavaFX 构建纸牌游戏,但我很难添加简单的动画。
我有一个包含多个 ImageView 的 HBox。每个图像都有 -80 的右边距以使图像相互重叠。
现在我想在添加卡片时为其设置动画。我想把它放在屏幕上的某个地方(对手玩家的手),然后将它移动到没有动画的位置。
我试过这个:
// Animation
Path path = new Path();
MoveTo moveTo = new MoveTo(200, 200);
moveTo.setAbsolute(true);
path.getElements().add(moveTo);
LineTo lineTo = new LineTo(0, 0);
path.getElements().add(lineTo);
PathTransition pathTransition = new PathTransition();
pathTransition.setDuration(Duration.millis(4000));
pathTransition.setPath(path);
pathTransition.setNode(imageView);
pathTransition.setCycleCount(1);
pathTransition.play();
但它并没有像我希望的那样工作。我不知道如何处理坐标,也找不到解决我的问题的方法。
我希望有人能帮我解决我的问题
最佳答案
正确的 Path
几何结构关键取决于根 Parent
的布局。在下面的示例中,Path
从左上角到右下角,调整以保持移动的 Rectangle
在 View 中。它将矩形添加到 Pane
,“因为除了将可调整大小的子项调整为首选大小之外,它不执行布局。”如果您使用更高级的布局,例如StackPane
,相应调整对齐方式:
StackPane root = new StackPane();
root.setAlignment(Pos.TOP_LEFT)
import javafx.animation.PathTransition;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Duration;
/** @see http://stackoverflow.com/a/31443755/230513 */
public class AnimationTest extends Application {
private static final int SIZE = 256;
private static final int RECT = SIZE / 4;
private static final int R2 = RECT / 2;
@Override
public void start(Stage stage) {
stage.setTitle("Animation Test");
Rectangle rect = new Rectangle(0, 0, RECT, RECT);
rect.setArcHeight(16);
rect.setArcWidth(16);
rect.setFill(Color.GOLD);
Pane root = new Pane();
root.getChildren().add(rect);
Scene scene = new Scene(root, SIZE, SIZE);
stage.setScene(scene);
stage.show();
Path path = new Path();
path.getElements().add(new MoveTo(R2, R2));
path.getElements().add(new LineTo(SIZE - R2, SIZE - R2));
PathTransition pathTransition = new PathTransition();
pathTransition.setDuration(Duration.millis(1000));
pathTransition.setPath(path);
pathTransition.setNode(rect);
pathTransition.setCycleCount(Timeline.INDEFINITE);
pathTransition.setAutoReverse(true);
pathTransition.play();
}
public static void main(String[] args) {
launch(args);
}
}
关于javafx 简单的 PathTransition 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31440024/