Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Controlar Fps En Sdl

Iniciado por Sacrifai, 28 de Diciembre de 2004, 01:37:32 PM

« anterior - próximo »

Sacrifai

 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

TheAzazel

 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

Sacrifai

 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...

vicho

 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

Sacrifai

 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.

TheAzazel

 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






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.