[Předchozí] Obsah [Další]

Použití Simple DirectMedia Layer API

Časovače

  • Získání aktuálního času v milisekundách

SDL_GetTicks() vám prozradí, kolik milisekund uběhlo od určitého okamžiku v minulosti.

Tip:
Při programování hry obecně platí, že je lepší založit pohyb objektů ve hře na čase, než na snímkové frekvenci. To zaručí stejnou hratelnost na rychlých i pomalých systémech.
Příklad:
#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);
}
  • Čekání po dobu určenou v milisekundách

SDL_Delay() umožní vašemu programu čekat určený počet milisekund.

Protože operační systémy komunikující s knihovnou SDL jsou multitaskingové, není způsob, jakým zajistit, aby vaše aplikace čekala přesně zadaný čas. Proto by tato metoda měla být využívána spíše jako chvilkové odstavení aplikace, než jako prostředek k jejímu rozběhnutí v konkrétní chvíli.

Tip:
Většina operačních systémů přiděluje procesům čas v 10 ms krocích. Pokud se chcete vzdát času procesoru pro aktuální krok ve prospěch dalších vláken, použijte SDL_Delay(1). To je důležité, pokud máte vlákno v krátké smyčce, ale chcete, aby další vlákna (např. zvukové) běžela.
Příklad:
{
    while ( game_running ) {
        UpdateGameState();
        SDL_Delay(TimeLeft());
    }
}
 

[Předchozí] Obsah [Další]