Accueil ⇒ Informatique ⇒ Bibliothèques ⇒ SDL ⇒ Leçon 6 : Temps

Leçon 6 : Temps

Un tutorial extrèmement court pour vous expliquer comment profiter des timers et autres fonctions temporelles offertes par SDL. Le but est ici de vous apprendre à synchroniser vos programmes.

Gérer le temps

" Qui as le temps ? Qui as le temps ? Mais si personne ne prenait son temps comment ferait-on pour... avoir du temps ? " Voilà qui résume bien le but de ce cours : vous apprendre à gérer le temps dans vos programmes pour, par exemple, synchroniser son exécution ou attendre durant un délai précis. Nous apprendrons à utiliser les fonctions classiques de gestion du temps mais nous verrons pas les Timers de SDL au travers des fonctions SDL_AddTimer, SDL_RemoveTimer et SDL_SetTimer.

Fonctions disponibles

Nous allons tout d'abord découvrir les deux fonctions les plus simples pour gérer le temps. La première est unsigned int SDL_GetTicks(void), qui renvoie dans un int le nombre de secondes écoulées depuis l'initialisation de SDL. Vous pourrez l'utiliser pour synchroniser les FPS de vos jeux par exemple, comme dans le code suivant :

#define SECONDES *1000

int main(void)
{
unsigned int last_time = SDL_GetTicks();

while(1)
{
// Réactualisation du programme toutes les 5 secondes
if (SDL_GetTicks() > last_time + (5 SECONDES))
last_time = SDL_GetTicks();
}
}

Le but est d'éviter que votre programme tourne trop vite sur des machines trop récentes et devienne injouable. On définit un jeu confortable entre 30 et 200 FPS, en-dessous le jeu saccade, au-delà le jeu va trop vite. Avec un code comme celui ci-dessus dans votre boucle principale vous serez à même de limiter et gérer les FPS. La seconde fonction, void SDL_Delay(unsigned int tps), permet d'attendre pendant un nombre donné de milisecondes. Pendant ce temps aucune autre instruction ne sera effectuée. Attention cependant : le temps du délai peut varier en fonction de l'OS. Voici un exemple de code qui attend 5 secondes :

#define SECONDES *1000

// Instructions

SDL_Delay(5 SECONDES);

// Suite du code

Cette fonction équivaut à la fonction sleep() de la librairie standard du C mais n'oubliez pas que SDL s'applique aussi au Python, Perl, Tcl/Tk... Ce tutorial est très court mais la gestion du temps (humain) au sein de votre programme est très importante et simple à mettre en place. J'espère que ces deux fonctions vous aideront. Je rapelle que nous n'aborderons pas les objets SDL_Timer ici car cela tient du Multithreading que nous verrons plus tard. Bon code !