Попытка создать класс "Ball" в JavaFX, состоящий из круга, управляемого кнопками для перемещения влево, вправо, вверх и вниз по экрану - PullRequest
0 голосов
/ 06 декабря 2018

Схема для моего Ball класса:

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.beans.property.DoubleProperty;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.util.Duration;

public class Ball extends Pane{
    public final double radius = 20;
      private double x = radius, y = radius;
      private double dx = 1, dy = 1;
      private Circle circle = new Circle(x, y, radius);
      private Timeline animation;

      public Ball() {
        circle.setFill(Color.GREEN); // Set ball color
        getChildren().add(circle); // Place a ball into this pane

        // Create an animation for moving the ball

        //Not sure if I need an animation


      public void play() {
        animation.play();
      }

      public void pause() {
        animation.pause();
      } 


      protected void moveLeft() {

          }
      protected void moveRight() {

      }
      protected void moveUp() {

      }
      protected void moveDown() {

      }
}

Я не совсем уверен, что бы я использовал в своих методах для перемещения влево, вправо и т. Д.

Что у меня естьпока что для моего исполняемого класса:

public class BallMover extends Application{

    Ball ballPane = new Ball(); // Create a ball pane



    @Override // Override the start method in the Application class
      public void start(Stage primaryStage) {
        // Hold four buttons in an HBox
        HBox ballcontrols = new HBox(); 
        Button btLeft = new Button("Left");
        Button btRight = new Button("Right");
        Button btUp = new Button("Up");
        Button btDown = new Button("Down");
        ballcontrols.getChildren().addAll(btLeft, btRight, btUp, btDown);


        // Create and register the handlers
        btLeft.setOnAction(e -> ballPane.moveLeft());
        btRight.setOnAction(e -> ballPane.moveRight());
        btRight.setOnAction(e -> ballPane.moveUp());
        btRight.setOnAction(e -> ballPane.moveDown());

        ballPane.setOnMouseClicked(e -> {

        });

        ballPane.setOnKeyPressed(e -> {

        });

        BorderPane borderPane = new BorderPane();
        borderPane.setCenter(ballPane);
        borderPane.setBottom(ballcontrols);
        BorderPane.setAlignment(ballcontrols, Pos.CENTER);

        // Create a scene and place it in the stage
        Scene scene = new Scene(borderPane, 200, 150);
        primaryStage.setTitle("ControlCircle"); // Set the stage title
        primaryStage.setScene(scene); // Place the scene in the stage
        primaryStage.show(); // Display the stage
      }

Как я могу использовать обработчики событий для перемещения мяча?Что бы мне пришлось добавить в методы moveLeft() moveRight() moveUp() moveDown(), чтобы эта работа работала?

1 Ответ

0 голосов
/ 06 декабря 2018

Это то, что вы пытаетесь сделать?

class Ball extends Pane{
    public double radius = 20;
    private double x = 0;
    private double y = 0;
    private final double dx = 5, dy = 5;
    private Circle circle = new Circle(radius, radius, radius);
    private TranslateTransition animation;

    public Ball() {
        circle.setFill(Color.GREEN);
        getChildren().add(circle);
        animation = new TranslateTransition(Duration.millis(200), circle);
    }

    protected void moveLeft() {
        animation.setFromX(x); animation.setFromY(y);
        animation.setToX(x - dx);
        x -= dx;
        animation.play();
    }
    protected void moveRight() {
        animation.setToX(x+dx);
        x += dx;
        animation.play();
    }
    protected void moveUp() {
        animation.setToY(y-dy);
        y -= dy;
        animation.play();
    }
    protected void moveDown() {
        animation.setToY(y+dy);
        y += dy;
        animation.play();
    }
}
...