Zeitproblem



  • Hallo zusammen,

    momentan beschäftigt mich ein Problem in meinem Programm, was meiner Meinung nach mit einer nicht ganz richtigen Zeitberechnung zusammenhängt.

    Hier mal die Funktion, die ich jeden Frame aufrufe und welche mir die fps und die Zeit zwischen zwei Frames berechnen soll:

    void calcFps()
    {
      aktuelleZeitFPS = GetTickCount();
      time = (aktuelleZeitFPS - letzterFrameFPS) * 0.001;  //Zeit zwischen zwei Frames in Millisekunden
      letzterFrameFPS = aktuelleZeitFPS;
    
      if((aktuelleZeitFPS - letzteZeitFPS) > 1000)
      {
        letzteZeitFPS = aktuelleZeitFPS;
        fps = frameCounter;  //Framezahl
        frameCounter = 0;
      }
      else
        frameCounter += 1;
    }
    

    Ich habe mal folgende Zahlen festgehalten:
    FPS: ca 200 -> time: 0.015
    FPS: ca 150 -> time: 0.015
    FPS: ca 31 -> time: 0.035
    FPS: ca 15 -> time: 0.065

    Die Zahlen sehen nicht richtig aus finde ich (das Verhältnis an sich und insbesondere die erste Zeile im Vergleich zur zweiten), es kann aber auch sein, dass sie einfach zu schnell wechseln, da sie jeden Frame neu gezeichnet werden.

    Also ich habe gedacht, man kann die Zeit zwischen zwei Frames mit der Anzahl der Einheiten, die man pro Sekunde zurücklegen will, miteinander multiplizieren. Mein Objekt verschiebe ich also folgendermaßen:

    objekt.translate(5.0f * getTime(), 0.0f, 0.0f);
    

    Leider fährt mein Objekt nie mit 5 Einheiten pro Sekunde und ich würde nun gerne wissen, warum dem so ist... es ist sogar so, dass, je höher die fps sind, desto langsamer bewegt sich mein Objekt (was ja anhand der Zahlen oben richtig wäre..)

    Wo ist also mein Fehler? Kann mir jemand helfen?



  • GetTickCount() liefert nur alle ~15 Millisekunden einen neuen Wert.
    Fuer hohe Frameraten ist die Zeit zwischen zwei Frames dann zu ungenau.
    Da die Berechnung der Framerate aber ueber eine Sekunde gemittelt wird, passt's da wieder.
    Schau mal nach High-Performance Counter.


Anmelden zum Antworten