Guten Tag, ich habe für ein Spiel einen Game Loop erstellt - um genau zu sein sogar zwei, einen der rendert, einer der updated. Sie arbeiten beide in einem separaten Thread zur main-Methode und funktionieren auch.
Ich habe eingebaut, dass sie FPS, TPS und Frametime an den aktuellen GameState weitergeben, damit man diese auslesen kann. Tuhe ich das so komme ich für den Update-Loop auf die eingestellten 30,0 - alles super! Tuhe ich es jedoch beim Render-Loop gibt mir dieser total konfuse Werte aus, die eigentlich nichts mit der wirklichen Framerate zu tun haben können.
Hier meine beiden Loops, ich glaube alle Variablen sind selbsterklärend:
"sleep()" ist eine Funktion die die Schlafzeit in Millisekunden und Nansekunden aufteilt und den Thread pausiert.
Ich habe eingebaut, dass sie FPS, TPS und Frametime an den aktuellen GameState weitergeben, damit man diese auslesen kann. Tuhe ich das so komme ich für den Update-Loop auf die eingestellten 30,0 - alles super! Tuhe ich es jedoch beim Render-Loop gibt mir dieser total konfuse Werte aus, die eigentlich nichts mit der wirklichen Framerate zu tun haben können.
Hier meine beiden Loops, ich glaube alle Variablen sind selbsterklärend:
Code:
while (running) //Rendering
{
start = System.nanoTime();
gsm.render(drawGraphics);
panelGraphics.drawImage(drawSurface, 0, 0, width, height, null);
/*bild, dessen grafik-objekt an die render-methode des aktuellen
*gamestates weitergegeben wird. so kann ich das angezeigte
*einfach skalieren ohne die koordinaten in jedem gamestate
*ändern zu müssen */
elapsed = System.nanoTime() - start;
sleep = rendertime - elapsed;
if (sleep > 0) {
sleep(sleep);
gsm.FPS(1000000000/sleep);//set current states 'FPS' -> ?????
gsm.FT(elapsed);//set current states 'FT'
}
}
Code:
while (running) //Updating
{
start = System.nanoTime();
gsm.update();
gsm.input(input);
elapsed = System.nanoTime() - start;
sleep = updatetime - elapsed;
if (sleep > 0) {
sleep(sleep);
gsm.TPS(1000000000/sleep);//set current states 'TPS'
}
}
Zuletzt bearbeitet: