Я новичок в JavaFX, и я уверен, что здесь что-то упущено.Я пытаюсь сделать анимацию машины, которая едет слева направо через окно, оборачиваясь вокруг правой стороны, когда она туда попадает.Пользователь должен иметь возможность нажимать вверх / вниз, чтобы настроить скорость анимации.У меня была анимация, когда я использовал PathTransition
объект, но обнаружил, что вы не можете отрегулировать Duration
для PathTransition
, поэтому я переделал его в Timeline
.
с помощью Timeline
, однако, я застрял.Автомобиль не отображается на экране, когда я запускаю приложение.Вот, что я надеюсь, это краткий фрагмент кода:
public class Project12 extends Application {
public static void main(String[] args) {
launch();
}
@Override
public void start(Stage primaryStage) {
//Create Pane to hold the car animation
Pane pane = new Pane();
//Create the RaceCarPane
RaceCarPane raceCar = new RaceCarPane();
pane.getChildren().add(raceCar); //Adds the race car to the main pane
//Create the VBox to hold components
VBox displayPane = new VBox();
displayPane.getChildren().addAll(pane, userInstructions, btnPause);
displayPane.setSpacing(15);
displayPane.setAlignment(Pos.CENTER);
//Create scene for display and add the display pane
Scene scene = new Scene(displayPane);
//Add the scene to the stage and display
primaryStage.setTitle("Project 12");
primaryStage.setResizable(false); //disable resizing of the window
primaryStage.setScene(scene);
primaryStage.show();
}
И RaceCarPane:
public class RaceCarPane extends Pane {
//Declare origin for determining polygon point locations
private double originX = 10;
private double originY = getHeight() - 10;
private Timeline carAnimation;
//Set the Timeline for the car in constructor method
public RaceCarPane() {
carAnimation = new Timeline(
new KeyFrame(Duration.millis(100), e -> moveCar()));
carAnimation.setCycleCount(Timeline.INDEFINITE);
carAnimation.play();
}
private void paint() {
//Create a polygon for the body
Polygon body = new Polygon();
body.setFill(Color.BLUE);
body.setStroke(Color.DARKBLUE);
//Add points to the body
ObservableList<Double> bodyList = body.getPoints();
/*(code omitted, just adding coordinates to the ObservableList for all parts.
I don't believe the bug is here since it displayed when I was using a PathTransition animation)*/
//Add to pane
getChildren().addAll(body, roof, frontWheel, rearWheel);
}
public void setOrigin (double x, double y) {
this.originX = x;
this.originY = y;
}
@Override
public void setWidth(double width) {
super.setWidth(width);
paint();
}
@Override
public void setHeight(double height) {
super.setHeight(height);;
paint();
}
public void moveCar() {
//Check that car is in bounds
if(originX <= getWidth()) {
originX += 10;
paint();
}
else {
originX = 0;
paint();
}
РЕДАКТИРОВАТЬ: В соответствии с комментарием @ Джая ниже, мое решение состояло в том, чтобы вернуться к PathTransition
объект и использовать его RateProperty
, связанный с SimpleDoubleProperty
.Хотя, может быть, это и не то, что проект искал в качестве решения, оно помогает, так что я счастлив!