Docsity
Docsity

Prüfungen vorbereiten
Prüfungen vorbereiten

Besser lernen dank der zahlreichen Ressourcen auf Docsity


Download-Punkte bekommen.
Download-Punkte bekommen.

Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo


Leitfäden und Tipps
Leitfäden und Tipps

Vorlesungfolien Einf. Programmierung (Medieninformatik):JavaFX Game Loop, Slides von Programmierung

Folien zur Vorlesung Einführung in die Programmierung für Nebenfach Medieninformatik, Prof. Hußmann, WS 2019/2020

Art: Slides

2019/2020

Hochgeladen am 08.06.2020

Greg_Stahlkamp
Greg_Stahlkamp 🇩🇪

4.3

(23)

1 / 26

Toggle sidebar

Diese Seite wird in der Vorschau nicht angezeigt

Lass dir nichts Wichtiges entgehen!

bg1
PROCESSINGPROCESSING
JAVAFXJAVAFX
Created by Michael Kirsch & Beat Rossmy
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a

Unvollständige Textvorschau

Nur auf Docsity: Lade Vorlesungfolien Einf. Programmierung (Medieninformatik):JavaFX Game Loop und mehr Slides als PDF für Programmierung herunter!

PROCESSINGPROCESSING

JAVAFXJAVAFX

Created by Michael Kirsch & Beat Rossmy

INHALTINHALT

Imports

Imports Node Graph

AnimationTimer

Wie können wir einen Loop erzeugen?

Anonymous Classes

Was sind Anonyme Klassen? Wie können wir nun den Kreis bewegen?

Key Input

Wie können wir auf Tasteneingaben reagieren?

IMPORTSIMPORTS

Imports binden Funktionalitäten von Entwicklern ein.

import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.shape.Circle; import javafx.stage.Stage;

public class Main extends Application { Circle ball;

public void start(Stage primaryStage) throws Exception{ Group root = new Group(); ball = new Circle (100,100,50); root.getChildren().add(ball);

primaryStage.setTitle("Pong"); primaryStage.setScene(new Scene(root, 300, 275)); primaryStage.show(); }

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

NODE GRAPHNODE GRAPH

Der Node Graph enthält

alle UI Elemente.

Die "Leafs" des Graphen

sind dabei die sichtbaren

Elemente.

Die "Branches" stellen

strukturierende Elemente

dar, die wiederum Nodes

als Kinder haben.

https://docs.oracle.com/javafx/2/scenegraph/jfxpub-scenegraph.htm

ANIMATIONTIMERANIMATIONTIMER

WIE KÖNNEN WIR EINEN LOOPWIE KÖNNEN WIR EINEN LOOP

ERZEUGEN?ERZEUGEN?

Betrachten wir den bisherigen Code können wir bereits in start,

ähnlich wie in setup unsere Applikation initialisieren.

Wo führen wir nun aber unseren draw Loop aus?

Die auf der vorherigen Folie demonstrierte Methode über eine

nicht endene while Schleife einen Loop zu erzeugen, in dem

wir unsere Animationen zeichnen können ist möglich, bietet

aber einige Nachteile.

Besser ist es auf von JavaFX vorgefertigte Methodiken

zurückzugreifen.

Für diesen Fall bietet JavaFX die Klasse AnimationTimer, die

Code in einem gleichmäßigen Zeitabstand wiederholt.

Dieser wird typischerweise wie folgend eingebunden.

public void start(Stage primaryStage) throws Exception{ // setup Group root = new Group(); ball = new Circle (100,100,50); root.getChildren().add(ball); primaryStage.setTitle("Pong"); primaryStage.setScene(new Scene(root, 300, 275)); primaryStage.show();

// draw new AnimationTimer () { public void handle (long currentNanoTime) { /* hier könnte unser Code stehen */ } }.start(); }

//... }

ANONYMOUS CLASSESANONYMOUS CLASSES

WAS SIND ANONYME KLASSEN?WAS SIND ANONYME KLASSEN?

Anonyme Klassen erlauben es uns Variationen von Klassen

während der Initialisierung eines Objekts zu erzeugen.

Beim Konstruktoraufruf haben wir die Möglichkeit die

verwendete Klasse zu überschreiben.

Das bedeutet bereits angelegte Funktionalität kann abgeändert

werden, aber keine neue hinzugefügt.

Das liegt daran, dass der Datentyp der Elternklasse diese

Funktionalität nicht enthält und daher nicht auf diese verwiesen

werden kann.

Der Code kann noch weiter verknappt werden.

public class XXX { int x;

public XXX () {}

void doSomething () { System.out.println("do something"); } }

public class Main { public static void main (String [] args) { new XXX () { @Override void doSomething() { System.out.println("do something else"); } }.doSomething(); // -> "do something else" } }

public void start(Stage primaryStage) throws Exception{ // setup Group root = new Group(); ball = new Circle (100,100,50); root.getChildren().add(ball); primaryStage.setTitle("Pong"); primaryStage.setScene(new Scene(root, 300, 275)); primaryStage.show();

// draw new AnimationTimer () { public void handle (long currentNanoTime) { /* hier könnte unser Code stehen */ } }.start(); }

//... }

WIE KÖNNEN WIR NUN DEN KREISWIE KÖNNEN WIR NUN DEN KREIS

BEWEGEN?BEWEGEN?