缺少JavaFX动画的哪个方面?

时间:2018-10-28 05:26:26

标签: animation javafx

我正在尝试让这个简单的动画在图像背景上播放,但是我无法启动它。  我尝试添加一个按钮以及使用playFromStart()而不是play()。 我还尝试将设定的方向添加到路径中,我认为它不会做任何事情,因为我只是在移动一个圆,它没有帮助。 我还尝试弄乱动画的时间和重复次数,以防万一它真的很快或很慢地发生,而我只是错过了。 我觉得我可能会缺少一些非常简单的东西,但是从我看过的所有内容,示例所包含的所有内容中,我也都有。

当我添加按钮时,背景图像也消失了,因为我尝试将其向上移动以及其他操作,但是我觉得这也是我的大脑刚刚碰到的一个简单问题。

package javafxapplication10;
import javafx.animation.PathTransition;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.*;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.paint.ImagePattern;
import javafx.scene.shape.*;
import javafx.stage.Stage;
import javafx.util.Duration;


public class JavaFXApplication10 extends Application {

    @Override
    public void start(Stage stage) {


            stage.setScene(scene);
            stage.setResizable(false);
            stage.sizeToScene();
            ImagePattern pattern = new ImagePattern(image);
            scene.setFill(pattern);        

            stage.setScene(scene);
            stage.show();

            Circle cir = new Circle (19);            
            cir.setLayoutX(170);
            cir.setLayoutY(100);
            cir.setFill(Color.KHAKI);
            pane.getChildren().add(cir);

            Path path1 = new Path();


            path1.getElements().add(new MoveTo(170,650));
            path1.getElements().add(new MoveTo(1335,650));
            path1.getElements().add(new MoveTo(1335,100));
            PathTransition pl = new PathTransition();
            pl.setDuration(Duration.seconds(8));
            pl.setPath(path1);
            pl.setNode(cir);
            pl.setCycleCount(1);
            //pl.setOrientation(OrientationType.ORTHOGONAL_TO_TANGENT);
            pl.setAutoReverse(false);
            //pl.play();

             Button begin = new Button("Begin");
            begin.setLayoutX(780);
            begin.setLayoutY(105);
            begin.setOnAction(new EventHandler<ActionEvent> () {
            @Override
            public void handle(ActionEvent press) {
                pl.play();

            }
            }); 
            pane.getChildren().add(begin);


    }

    Image image = new Image("file:Figure one.png");

    Pane pane = new Pane();
    Scene scene = new Scene (pane,1474,707);

    public static void main(String[] args) {
        launch(args);
    }

}

1 个答案:

答案 0 :(得分:1)

PathTransition仅沿实际绘制的路径移动节点。 MoveTo元素不会绘制任何内容,而只是设置当前位置。您需要使用LineTo(和/或ClosePath)在Path中绘制内容。此外,PathTransition设置转换属性,而不是布局属性,即,通过将布局坐标添加到Path提供的共坐标中来确定圆的最终位置。因此,您应该使用翻译属性定位Circle或在(0, 0)处开始路径:

Path path1 = new Path(
        new MoveTo(0, 0),
        new LineTo(0, 550),
        new LineTo(1165, 550),
        new LineTo(1165, 0),
        new ClosePath()
);
// path1.getElements().add(new MoveTo(170,650));
// path1.getElements().add(new MoveTo(1335,650));
// path1.getElements().add(new MoveTo(1335,100));