Haber si alguien conociese un ejemplo, a poder ser usando las funciones de sdl, para reducir los frames de 90 a 30, porque no he encontrado nada de documentación. Cualquier tipo de información, ya sea articulo o tutorial se agradece.
Gracias
Uhmm... sobre los fps hay mucho mas de lo q puedas imaginar...
te refieres a controlar la velocidad de volcado grafico del jeugo? la de la logica del juego? todo junto???
yo tengo por ahi una funcion que lo hace... te corto aqui un fragmento para que veas como es, hay mil formas de hacer esto y todo depende de...lo q kieras conseguir... esta posiblemente no sea la mejor pero es generica :)
Antes, tenemos q inicialiar estos valores...
iFPS=0;
TimeCtrl.frames=0;
TimeCtrl.fps=0;
TimeCtrl.ctime=0;
TimeCtrl.seg=0;
TimeCtrl.itime=SDL_GetTicks();
TimeCtrl es una estructura y todas las variables son Uint32
Y luego ya la comprobacion... por cierto, iFPS serian los FPS que deseas obtener como maximo.
Uint32 temp;
// Actualizamos frames, ctime y ctrl
TimeCtrl.frames++;
MY_DELAY:
TimeCtrl.ctime=SDL_GetTicks();
temp=TimeCtrl.ctime-TimeCtrl.itime;
// Actualizamos fps y seg
TimeCtrl.seg=((float)temp)/(float)1000;
TimeCtrl.fps=(Uint32)(TimeCtrl.frames/TimeCtrl.seg);
// Si deseamos tener unos FPS activamos retardo si procede
if(iFPS>0)
{
if(TimeCtrl.fps>iFPS)
{
SDL_Delay(10);
goto MY_DELAY;
}
}
mas o menos creo q se entiende, pos nada, cualquier pregutna...tirala por aki, saludos
Muchas gracias por la respuesta y el codigo. Solo tengo una duda, el segundo código debería ir en el bucle principal ¿no? Es que lo he probado y no me rula, algo estoy haciendo mal...
hechale una mirada a
el tuto de sincro por frameratela idea es que el obtener_tiempo sea el SDL_GetTicks aqui va donde esta la doc de SDL de los tiempos
doc de time de SDL
Arreglado, funciona perfectamente :D . Por cierto, tuve que poner seg de coma flotante para que funcionase, ya que si no daba error al dividir entre zero al debugear. Muchas gracias ^^.
PD: Gracias vicho por los links, les echaré un ojo para aclarar algunas dudillas.
jeje, sorry, tenia q haberte copiado tambien la estructura:
// Control del tiempo
struct TimeCtrl
{
Uint32 ctime; // Tiempo actual (en ms)
Uint32 itime; // Tiempo inicial (en ms)
Uint32 frames; // Numero total de frames
Uint32 fps; // Frames por segundo
float seg; // Segundos en ejecucion
} TimeCtrl;
pero era mas que nada para que pillaras la idea de como hacerlo... tambien tiene un goto por ahi q a alguno no le molara nada jejeje, de todas modos, puedes poner un while y listo pero es q a mi el goto tampoco me molesta usarlo..creo q esa es la primera vez en c q lo utilizo jaja
uhmm... en las proximos dias (a ver si me kito la vagueza de encima), colgare de mi web la libreria para desarrlllo de juegos sobre SDL q tiene muchisimas cosas, lo mismo a ti te viene bien y todo :)
pos na, cualquier otra cosa... ya sabes,taluego