› Foros › Multiplataforma › Desarrollo
while(corriendo)
{
timeNow = SDL_GetTicks(); //para el calculo de los fps
fpsNow,fpsPrev = SDL_GetTicks(); //para limitar los fps
....
lectura de controles;
calculo de posiciones;
calculo de colisiones;
bliteo en buffer;
imprimir variable fps;
determinar si se ha terminado el juego;
flip a pantalla;
//calculo fps
if( timeNow - timePrev > 1000 )
{
timePrev = timeNow;
fps = temp;
temp=0.0;
}
//frame lock
while(fpsNow - fpsPrev < 25)
{
fpsNow = SDL_GetTicks();
}
temp++;
}
Meeths escribió:Una forma rápida aunque no 100% precisa (porque también influyen otras cosas), es la de 1/DeltaT, donde DeltaT es la diferencia en segundos(con decimales, bien float, fixed o double) entre un frame y otro.
Para qué necesitas exactamente la limitación de frames?
DeltaTMax = 1 / FPSDeseados
DeltaTAcumulada += DeltaT
while(DeltaTAcumulada > DeltaTMax)
{
DeltaTAcumulada -= DeltaTMax
...
ActualizaTusCosas(DetaTMax)
}
En lugar de mover tus objetos en una cantidad fija de desplazamiento, usa la fórmula velocidad*tiempo, donde el tiempo ya lo has obtenido (DeltaT), y la velocidad la pones tú segun lo que quieras hacer