Package pi.loop

Class GameLoop

java.lang.Object
pi.loop.GameLoop

public final class GameLoop extends Object
Die Ereignisschleife der Engine.

In ihr wird die Verarbeitung der Eingaben des Benutzers angestoßen, die Berechnung neuer Weltzustände gestartet und das Erzeugen neuer Ausgaben angewiesen.

Author:
Michael Andonie, Niklas Keller
  • Constructor Details

  • Method Details

    • currentScene

      @Getter public Scene currentScene()
      Gibt die aktuelle Szene aus.
      Returns:
      Die aktuelle Szene.
      Since:
      0.42.0
    • frameCounter

      @Getter public long frameCounter()
      Gibt die Anzahl an Einzelbilder aus, die seit dem Start des Spiels berechnet wurden.
      Returns:
      Die Anzahl an Einzelbilder, die seit dem Start des Spiels berechnet wurden.
      Since:
      0.42.0
    • frameDuration

      @Getter public double frameDuration()
      Gibt tatsächliche Anzeigedauer eines Einzelbilds in Sekunden aus.
      Returns:
      Die tatsächliche Anzeigedauer eines Einzelbilds in Sekunden.
      Since:
      0.42.0
    • enqueue

      public void enqueue(Runnable task)
      Fügt eine Aufgabe in die Warteschlange ein, um ihn später auszuführen.
      Parameters:
      task - Die auszuführende Aufgabe.
    • run

      public void run()
      Führt die Haupt-Ereignisschleife aus, die kontinuierlich bis zur Unterbrechung des Threads läuft. Die Methode orchestriert den gesamten Spielzyklus:
      • Berechnet die verstrichene Zeit seit dem letzten Frame (maximal 2x die gewünschte Frame-Dauer)
      • Aktualisiert die aktuelle Szene mit der verstrichenen Zeit
      • Ruft die FrameUpdateListener der aktuellen Szene auf.
      • Aktualisiert die Kamera der aktuellen Szene
      • Verarbeitet alle ausstehenden Aufgaben aus der Dispatch-Queue
      • Rendert den aktuellen Frame
      • Synchronisiert die Frame-Rate durch Sleep-Mechanismus, um die gewünschte Frame-Dauer einzuhalten
      • Berechnet die tatsächliche Frame-Dauer für den nächsten Zyklus
      Die Loop wird beendet, wenn der aktuelle Thread unterbrochen wird (InterruptedException). Nach Beendigung der Loop wird der Thread-Pool korrekt heruntergefahren und wartet maximal 3 Sekunden auf die Terminierung ausstehender Aufgaben.
      Throws:
      RuntimeException - wenn ein unerwarteter Fehler während der Ausführung der Loop auftritt
    • frameUpdateListener

      @Getter public EventListeners<FrameUpdateListener> frameUpdateListener()
    • render

      public void render(RenderTarget renderTarget)
    • main

      public static void main(String[] args)