top of page

6. Architecture OPTIMALE  !

Voici la structure optimale d’un programme SDL, elle utilise SDL_WaitEvent() bien sur puisque ainsi on traite les évènements sans délai tout en minimisant la consommation CPU.

 

Pour avoir des animations et des affichages autonomes ?

Très simple : il suffit de rajouter des évènements périodiques qui vont nous permettrent de franchir l’attente et d’obtenir ainsi un affichage continu !

 

Pour cela nous allons utiliser un timer, il suffit de rajouter dans l’initialisation :

 

timer =

SDL_AddTimer(t_frame, callTimer, &paramTimer);

 

 

Et voici le callback du timer : à chaque période t_frame, il va créer un évènement que nous traitons dans la foncfion GesUser().

La ligne 141 du callback nous amène systématiquement toutes les 40ms (t_frame) à valider la condition de la ligne 81 de la boucle principale et à franchir l'attente.

La fonction GesUser() remplace la fonction Actualisation() : elle est appelée lors de chaque évènement déclenché pour l’affichage.

C’est ici que l’on va faire toutes les incrémentations et les actualisations qui doivent se faire à période fixe dans le programme.

 

Cette structure du main() et de la boucle principale est très simple et peut être utilisée avantageusement pour tous vos programmes :

  • En l’absence d’évènement utilisateur : la boucle principale tourne à période fixe au rythme de l’  « user event », les actualisations nécessaires se font dans GesUser() et sont suivie par un affichage périodique.

  • Dés que des évènements utilisateur se présentent : ils sont traités immédiatement AVEC un affichage actualisé, en présence de nombreux évènements consécutifs la boucle est accélérée. Surtout il n’y a aucun délai dans le traitement contrairement à la structure classique avec SDL_PollEvent().

 

Vous pouvez voir que si vous ne touchez pas la souris l’affichage se produit toutes les 40 ms. Si maintenant vous bougez très rapidement la souris : l’affichage se produit pour pour chaque « motion » avec des valeurs rapprochées de x.

 

Cette structure est évolutive : pour rajouter des animations il suffit de compléter les fonctions existantes.

 

Voir ci-dessous la fonction Affichage() modifiée très simplement pour faire des animations autonomes : faire clignoter une image2 et faire se déplacer puis rebondir une autre image3 entre les bords de l’écran

Pour l’image2 qui clignote : un simple Flag (positionné dans GesUser() en fonction du temps) va permettre de l’afficher ou non.

Pour l'image3 : on va actualiser sa position et ses changements de mouvement également dans  GesUser().

 

Le CODE COMPLET est donné page suivante.

C’est un exemple pédagogique pour faire comprendre l’architecture aux débutants.

NOTA pour les puristes : dans un souci de lisibilité et de simplification tout est traité avec des variables globales.  

    < Page précédente                                                                                                    Sommaire                                                            > Page suivante

bottom of page