timeGetTime kan bruges (inkluder mmsystem filen), endda meget effektivt med et kald til timeBeginPeriod(1); i fx OnCreate og timeEndPeriod(1); i OnDestroy.
TTimer eller GetTickCount kan også bruges, men især GetTickCount er upræcis (der kan gå helt op til 50 ms før den opdateres, men oftest ligger den på 10 - 30 ms), så den vil jeg ikke anbefale.
Senere hen kan QueryPerformanceCounter bruges, hvis du behøver mere præcision (den kan have ned til 1 mikrosekunds præcision).
timeGetTime skulle også gerne være præcis nok op til 3-500 fps, da den opdateres ca. hvert millisekund eller deromkring, pga. timeBeginPeriod og timeEndPeriod kaldene, i mit eksempel.
Dertil skal du så, før hvert billede eller opdatering (det behøver jo ikke at være samtidig), så skal du finde ændringen i tiden, fx som her:
current_time, last_time : integer;
delta_time : real;
// OnCreate eller bare før brugen af timeren, men kald den kun 1 gang
timeBeginPeriod(1);
// hver opdatering:
current_time = timeGetTime();
delta_time = current_time - last_time;
last_time = current_time;
object1.position.x = object1.position.x + OBJECT_VELOCITY * delta_time;
// OnDestroy eller bare før afslutning af programmet, da timeren ellers vil opdateres 10-15x hurtigere end der er brug for til normalt Windows brug
timeEndPeriod(1);
OBJECT_VELOCITY er en konstant, som er antal enheder (fx pixels, hvis det er 2D), som objektet skal flytte sig per sekund.
Det skulle meget gerne forklare nogenlunde, hvordan man får objekter til at bevæge sig uafhængigt af fps.
Selvfølgelig er objektet object1 bare et eksempel, som skal forklare princippet, men så vidt jeg forstår har du allerede et objekt.
1101110100010110000101000001