[Anterior] Conteúdo [Próximo]

Usando a API Simple DirectMedia Layer

Timers

  • Obtendo o tempo atual, em milisegundos

SDL_GetTicks diz quantos milisegundos passaram desde um ponto arbitrário no passado.

Dica:
Em geral, quando se implementa um jogo, o melhor é mover objetos no jogo baseado em tempo ,ao invés de basear-se na taxa de quadros por segundo. Isto produz jogabilidade consistente tanto em sistemas lentos quanto rápidos.
Exemplo:
#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);
}
  • Esperando um numero especifico de milisegundos

SDL_Delay() permite você esperar por alguma quantidade de milisegundos

Já que os sistemas operacionais suportados por SDL são multitarefa , não ha como garantir que sua aplicação vai esperar exatamente o tempo pedido. Isto deve ser usado mais como um meio de parada por um tempo do que para despertar em tempo particular. 

Dica:
A maioria dos sistemas operacionais tem  como porção de tempo do "Escalador de tarefas por tempo" 10 ms. Você pode usar SDL_Delay(1) como um meio de entregar a CPU pela fatia de tempo atual,permitindo a outras instancia rodar.Isto é importante em um "loop apertado" quando você deseja dar  tempo a outras instancias.
 
Exemplo:
{
    while ( game_running ) {
        UpdateGameState();
        SDL_Delay(TimeLeft());
    }
}
 

[Anterior] Conteúdo [Próximo]