Javafx pong?

1 Antwort

Du brauchst ein Canvas-Element, auf dem die Spielelemente gezeichnet werden und einen Timer, der die Zeichenfläche immer wieder neuzeichnen lässt.

Beispiel:

var graphicsContext = yourCanvas.getGraphicsContext2D();
var delay = 5;
var timer = new Timeline(new KeyFrame(Duration.millis(delay), evt -> draw(graphicsContext)));
timer.setCycleCount(Timeline.INDEFINITE);
timer.play();

Dazu brauchst du noch eine draw-Methode:

void draw(GraphicsContext graphicsContext) {
  // draw board elements ...
}

Die Ballposition speicherst du dir in einem Feld, sodass dessen Zustand über die draw-Aufrufe hinweg erhalten bleibt. Um den Ball zu bewegen, brauchst du nur den Feldwert ändern.

Beispiel:

private int ballXPosition = 0;

void draw(GraphicsContext graphicsContext) {
  graphicsContext.setFill(Color.WHITE);
  graphicsContext.fillRect(0, 0, yourCanvas.getWidth(), yourCanvas.getHeight());

  ++ballXPosition;
  graphicsContext.setFill(Color.RED);
  graphicsContext.fillOval(ballXPosition, 10, 10, 10);
}

Bei jedem Aufruf von draw wird mittels eines weißen Rechtecks zuerst die Zeichenfläche geleert. Danach wird die X-Position erhöht und der Kreis gezeichnet.