Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
Jeux vidéo de type bac à sable
19 avril 2013

codemoe : une boucle en SDL optimisée

Pour ceux qui commence à faire du sdl si vous avez fait comme moi vous obtenez en général un boucle comme ci-dessous:

while (isRunning) {
//Je gère mon affichage
SDL_Flip( fenetre );
while( ([chronometre tempsPasse] < (1000 / FRAMES_PER_SECOND)) )
{
//On attend...
}
}

En général on a une boucle infinie qui gère l'affichage et les saisies et en fin de boucle on attends un petit peu que ça ce passe.

Le gros inconvénient de cette boucle c'est qu'elle tourne très vite et rapidement le ventilateur de votre machine s'emballe vous signifiant que le CPU est à fond (et tout ça pour rien faire :-p )

Lorsque je me suis intéressé au sujet (j'aime pas entendre mon ventilo souffler pour rien) j'ai fait pas mal de recherches et de tests pour finalement arriver à ce résultat:

while (isRunning) {
//Je gère mon affichage
SDL_Flip( fenetre );
if ( [chronometre tempsPasse] < (1000 / FRAMES_PER_SECOND) )
{
SDL_Delay((1000 / FRAMES_PER_SECOND)-[chronometre tempsPasse]);
}
}

L'idée ici est non plus de tourner sans arrêt jusqu'à écoulement du temps mais d'utiliser une fonctionnalité qui endors l'application laissant à votre machine le temps de faire autre chose.

A noter le test avant qui permet de ne pas appliquer un délai négatif :-p

Tous ceux qui ont creusé un peu dans SDL trouveront ça basique mais quand on débute sur SDL la plupart des tutoriaux ne vous donnent que la première boucle dans leurs exemples ce qui est un peu dommage.

Publicité
Publicité
Commentaires
Jeux vidéo de type bac à sable
Publicité
Publicité