Keller-Dev Docs · Java & Hytale

Java Advanced

Game Loop mit fester Taktung (FPS/UPS) & Delta-Time

Eine while(true)-Schleife ohne Bremse läuft auf jedem Rechner unterschiedlich schnell. Um eine konstante Spielgeschwindigkeit zu garantieren, wird die verstrichene Zeit gemessen (System.nanoTime()) und in festen Zeitschritten abgearbeitet. Kernkonzepte: Fixed Timestep: Die Logik updatet in festen Abständen (z. B. 60 Updates/s). Multi-Threading: Der Loop läuft in einem eigenen Thread (Runnable), um die Benutzeroberfläche nicht zu blockieren. Threading-Safety: UI-Neuzeichnungen werden nicht direkt aus dem Loop aufgerufen, sondern über repaint() an den Event Dispatch Thread (EDT) übergeben.

Referenz: Datei 1. Spielprojekt · Klasse GameLoop
// Entnommen aus GameLoop.java
@Override
public void run() {
    long lastTime = System.nanoTime();
    double accumulatedTime = 0;

    while (running) {
        long now = System.nanoTime();
        double elapsed = now - lastTime;
        lastTime = now;
        accumulatedTime += elapsed;

        while (accumulatedTime >= NS_PER_UPDATE) {
            update(NS_PER_UPDATE / 1_000_000_000.0); // Delta-Time in Sekunden
            accumulatedTime -= NS_PER_UPDATE;
        }

        gamePanel.repaint(); // Abgabe an EDT
        sleepBriefly();
    }
}
#game-loop #threads #delta-time #concurrency #java
Bearbeiten