【问题标题】:JavaFX: How can I change the points of a polygon in an animation?JavaFX:如何更改动画中多边形的点?
【发布时间】:2018-04-16 09:32:24
【问题描述】:

我知道你可以像这样在动画中改变圆的位置(另见here):

timeline.getKeyFrames().addAll(
    new KeyFrame(Duration.ZERO, // set start position at 0
        new KeyValue(circle.translateXProperty(), random() * 800),
        new KeyValue(circle.translateYProperty(), random() * 600)
    ),
    new KeyFrame(new Duration(40000), // set end position at 40s
        new KeyValue(circle.translateXProperty(), random() * 800),
        new KeyValue(circle.translateYProperty(), random() * 600)
    )
);

但是否也有可能(这意味着Property)在动画中改变多边形的点?

如果不是:我还必须使用 JavaFX 在动画中变形多边形还有哪些其他可能性?

【问题讨论】:

    标签: java javafx javafx-8


    【解决方案1】:

    Polygon 中的点没有单独的属性,但您可以使用 Path 或 LineTos、MoveTo 和 ClosePath 来分别为多边形的坐标设置动画。

    示例:

    Pane pane = new Pane();
    pane.setPrefSize(400, 400);
    
    MoveTo corner1 = new MoveTo();
    LineTo corner2 = new LineTo();
    LineTo corner3 = new LineTo();
    
    Path path = new Path(corner1, corner2, corner3, new ClosePath());
    pane.getChildren().add(path);
    
    Timeline timeline = new Timeline(
            new KeyFrame(Duration.ZERO,
                    new KeyValue(corner1.xProperty(), 200d),
                    new KeyValue(corner1.yProperty(), 200d),
                    new KeyValue(corner2.xProperty(), 200d),
                    new KeyValue(corner2.yProperty(), 200d),
                    new KeyValue(corner3.xProperty(), 200d),
                    new KeyValue(corner3.yProperty(), 200d)),
            new KeyFrame(Duration.seconds(2),
                    new KeyValue(corner1.xProperty(), 100d),
                    new KeyValue(corner1.yProperty(), 100d),
                    new KeyValue(corner2.xProperty(), 250d),
                    new KeyValue(corner2.yProperty(), 300d),
                    new KeyValue(corner3.xProperty(), 50d),
                    new KeyValue(corner3.yProperty(), 380d)));
    timeline.setCycleCount(Animation.INDEFINITE);
    timeline.setAutoReverse(true);
    timeline.play();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多