snippet

Frame Capping With Really Bad Timers

The following piece of code is written in Java, but it should be easy to port it to other languages.

long lastFrame=0;
float yield=10000f;
float frameAverage=16f; //start with desired msec per frame

[...]

long timeNow = System.currentTimeMillis();
//rolling average for the last 10 time inputs
frameAverage = (frameAverage * 10 + (timeNow - lastFrame)) / 11;
lastFrame=timeNow;

//16f = for 16msec
//0.1f = damping value
//+0.05f ensures that it can grow faster after it ran flat out for a while
yield+=yield*((16f/frameAverage)-1)*0.1f+0.05f;

for(int i=0;i<yield;i++)
    Thread.yield();
Syndicate content