[Precedente]
Contenuti
[Successivo]
Usare la Simple DirectMedia Layer API
I Timer
- Ottenere il tempo attuale, in millisecondi
La funzione SDL_GetTicks() ritorna quanti millisecondi sono
trascorsi da un punto arbitrario nel passato.
|
Suggerimento:
In generale, quando si scrive un gioco, e' meglio muovere gli oggetti
in base al tempo, invece che in base al frame-rate. Questo fa si che
la risposta (e quindi la giocabilita') sia migliore sia su sistemi lenti
che su sistemi veloci. |
Esempio:
#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);
}
|
- Attesa di un numero specifico di millisecondi
La funzione SDL_Delay() permette di effettuare un attesa
deterministica per un dato numero di millisecondi.
Dal momento che i sistemi operativi sui quali gira SDL sono
tutti multi-tasking, non c'e' modo sicuro per garantire che
l'applicazione attendera' esattamente per un dato tempo.
Quindi, questo sistema dovrebbe essere usato piu' per fare
in modo che l'applicazione si fermi per un po' di tempo, invece
che per fare in modo che aspetti un preciso momento.
|
Suggerimento:
Molti sistemi operativi funzionano su 'blocchi' schedulati di
circa 10 millisecondi. E' possibile usare SDL_Delay(1) per fare
in modo che l'applicazione rilasci la CPU per il 'blocco' corrente,
cosicche' altri thread possano essere eseguiti. Questo e' importante
se si ha un thread in un loop stretto, ma non si vuole impedire
l'esecuzione di altri thread che necessitano di un'attenzione
continuata (come quelli che controllano l'audio). |
Esempio:
{
while ( game_running ) {
UpdateGameState();
SDL_Delay(TimeLeft());
}
}
|
[Precedente]
Contenuti
[Successivo]
|