# Game Loop verhält sich eigenartig



## Roovy (23. Dez 2016)

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:

```
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'
                }
            }
```


```
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'
                }
            }
```
"sleep()" ist eine Funktion die die Schlafzeit in Millisekunden und Nansekunden aufteilt und den Thread pausiert.


----------



## Roovy (23. Dez 2016)

Ich konnte mein Problem nach langem herumprobieren endlich lösen:
Mit folgenden Formeln kann man alle Werte berechnen:

```
TPS = 1000000000 / sleep //ticks per second
FT = sleep + elapsed //frametime
FPS = 1000000000 / (elapsed+sleep) //frames per second
```
Ich hoffe ich kann jemandem von euch damit weiterhelfen!


----------

