Quote Originally Posted by chronozphere
I use the TApplication.OnIdle event for my rendering. Every time this loop is executed, the FPS and the frametime are calculated. FrameTime is the time needed to render a frame. I use QueryPerformanceCounter and QueryPerformanceFrequency for this.

And every time i move an object i do this:

[pascal]
Obj.x := Obj.x + 100*FrameTime;
Obj.y := Obj.y + 100*FrameTime;
[/pascal]

So that the object is moved with respect to the time that passed. In my example, the object will move exactly 100 pixels to the right and 100 pixels to the bottom in one second.

Hope this helps.
you need specify max FPS to use this? with low machines you need skip frames?