Hallo,
Ich habe mir mal eine übliche Game-Loop aus einem Tutorial (Setting up the JFrame - YouTube) herausgepickt und habe dazu aber noch ein paar Verständnissfragen.
Die Fragen habe ich direkt in den Code reinkommentiert:
Ich habe mir mal eine übliche Game-Loop aus einem Tutorial (Setting up the JFrame - YouTube) herausgepickt und habe dazu aber noch ein paar Verständnissfragen.
Die Fragen habe ich direkt in den Code reinkommentiert:
Java:
public class Game {
public static void main(String[] args) {
/*
* Wir wollen hier 60 Ticks pro Sekunde erreichen
*/
long lastTime = System.nanoTime();
double nsPerTick = 1000000000D / 60D; // speichert die Nanosekunden, die wir pro Tick im Schnitt brauchen müssen, um auf 60 Ticks pro Sekunde zu kommen
int ticks = 0;
int frames = 0;
long lastTimer = System.currentTimeMillis();
double delta = 0; // soll wohl die Dauer des letzten Schleifendurchlaufes festhalten?!
while(true) {
long now = System.nanoTime();
/*
* "now - lastTime" = Dauer des letzten Schleifendurchlaufes, das ist klar.
* Aber wieso wird hier nun noch durch nsPerTick geteilt? Was will man damit erreichen?
*/
delta += (now - lastTime) / nsPerTick;
lastTime = now;
boolean shouldRender = true; // Kann man später auf false setzen um auf 60FPS zu beschränken
/* Wann genau soll diese Schleife hier durchlaufen werden? Also wozu die Prüfung "delta >= 1" ?
* Ziel ist doch offenbar, dass diese Schleife 60x pro Sekunde durchlaufen wird oder?
*/
while(delta >= 1) {
ticks++;
tick();
delta -= 1; // Wieso reduziert man delta um 1? Kann man delta nicht direkt gleich 0 setzen?
shouldRender=true;
}
try {
Thread.sleep(2); // Damit das System nicht voll ausgelastet wird
} catch (InterruptedException e) {
e.printStackTrace();
}
if(shouldRender) {
frames++;
render();
}
if(System.currentTimeMillis() - lastTimer >= 100) {
lastTimer +=1000;
System.out.println(ticks + " ticks, " + frames + "frames");
frames = 0;
ticks = 0;
}
}
}
private static void render() {
}
private static void tick() {
}
}