[Anterior] Tabla De Contenido [Siguiente]

Usando la API de Simple DirectMedia Layer

Temporizadores

  • Obtener el tiempo actual, en milisegundos

SDL_GetTicks() te dice cuantos milisegundos han pasado desde un punto arbitrario del pasado.

Pista:
En general, cuando se implementa un juego, es mejor mover objetos en el juego basándose en el tiempo en lugar de la velocidad de marcos. Esto produce jugabilidad tanto en máquinas rápidas como en lentas.
Ejemplo:
#define TICK_INTERVAL    30

Uint32 TimeLeft(void)
{
    static Uint32 next_time = 0;
    Uint32 now;

    now = SDL_GetTicks();
    if ( next_time <= now ) 
    {
        next_time = now+TICK_INTERVAL;
        return(0);
    }
    return(next_time-now);
}
  • Esperar un número determinado de milisegundos

SDL_Delay() te permite esperar un número determinado de milisegundos.

Dado que los sistemas operativos que soportados por SDL son multitares, no hay una manera de garantizar que tu aplicación se detendrá exactamente el tiempo solicitado. Debería ser usado más para parar por un momento más que para despertar en un momento determinado.

Pista:
La mayor parte de los sistemas operativos tiene una porción de tiempo del planificador de 10 ms. Puedes utilizar SDL_Delay(1) como una manera de liberar la CPU para la porción de tiempo actual, permitiendo la ejecución de otros hilos. Esto es importante si tienes un hilo ejecutando un bucle muy estrecho pero deseas que los demás hilos (como el del sonido) sigan ejecutándose.
Ejemplo:
{
    while ( game_running ) 
    {
        UpdateGameState();
        SDL_Delay(TimeLeft());
    }
}
 

[Anterior] Tabla De Contenido [Siguiente]