[Zurück] Inhaltsverzeichnis [Weiter]

Verwendung der "Simple DirectMedia Layer"-API

Timers

  • Wie spät ist es in Millisekunden?

SDL_GetTicks() gibt die vergangenen Millisekunden seit einem bestimmten Zeitpunkt an.

Tip:
Wenn man ein Spiel schreibt, ist es im allgemeinen besser, die Objekte basierend auf der Zeit statt der Framerate zu bewegen. Das ergibt eine konsistentere Bewegung auf schnellen und langsamen Systemen.
Beispiel:
#define INTERVAL_MS    30

Uint32 restZeit(void)
{
    static Uint32 naechsteZeit = 0;
    Uint32 jetzt;

    jetzt = SDL_GetTicks();
    if ( naechsteZeit <= jetzt ) {
        naechsteZeit = jetzt+INTERVAL_MS;
        return(0);
    }
    return(naechsteZeit-jetzt);
}
  • Eine Anzahl von Millisekunden warten

SDL_Delay() ermöglicht einem, eine bestimmte Anzahl von Millisekunden zu warten.

Da die Betriebssysteme, auf denen SDL läuft, Multitasking-Systeme sind, kann man nicht vorherbestimmen, wie lange diese Funktion exakt warten wird. Sie sollte daher eher verwendet werden, um ein wenig Zeit vergehen zu lassen, statt um zu einem genauen Zeitpunkt aufzuwachen.

Tip:
Die meisten Betriebssysteme haben Zeiteinteilungen ("time slices") von etwa 10 ms. Mit SDL_Delay(1) kann man den aktuellen Slice abgeben und andere Threads laufen lassen. Das ist wichtig, wenn ein Thread in einer engen Schleife läuft, aber andere Threads (zum Beispiel Audio) auch Zeit benötigen.
Beispiel:
{
    while ( spielLaeuft ) {
        aktualisiereSpielStatus();
        SDL_Delay(restZeit());
    }
}
 

[Zurück] Inhaltsverzeichnis [Weiter]