Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Sacrifai en 28 de Diciembre de 2004, 01:37:32 PM

Título: Controlar Fps En Sdl
Publicado por: Sacrifai en 28 de Diciembre de 2004, 01:37:32 PM
 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
Título: Controlar Fps En Sdl
Publicado por: TheAzazel en 28 de Diciembre de 2004, 03:01:47 PM
 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
Título: Controlar Fps En Sdl
Publicado por: Sacrifai en 28 de Diciembre de 2004, 03:29:15 PM
 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...
Título: Controlar Fps En Sdl
Publicado por: vicho en 28 de Diciembre de 2004, 03:32:58 PM
 hechale una mirada a

el tuto de sincro por framerate

la 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
Título: Controlar Fps En Sdl
Publicado por: Sacrifai en 28 de Diciembre de 2004, 03:34:54 PM
 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.
Título: Controlar Fps En Sdl
Publicado por: TheAzazel en 28 de Diciembre de 2004, 03:59:44 PM
 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