top of page

2. La  Gestion  des évènements

 

On trouvera divers tutoriels sur ce sujet, ce que veux éclaircir ici ce sont les principes de base.

Trop souvent, lors de la conception de leurs premiers programmes SDL, les débutants confondent un état et un évènement.

Prenons par exemple une touche du clavier :

 

  • Un état a une certaine durée dans le temps

  • Un évènement se produit sur un temps quasi nul, c’est une transition, un évènement est un changement d’état

 

Les états : Etat 1= touche enfoncée, Etat 2 = touche relâchée,  appui sur bouton de souris ...

Les évènements : Ev1, Ev2, Ev3 = la touche a changé d'état, clic de souris (le bouton passe de relaché à enfoncé) ...

 

Pour tester un état par une instruction de code (par exemple ici  « Etat 2 » touche relâchée), il est possible très simplement de le faire avec une instrucion " if() " (voir exemple ci_dessous).

Un état peut se tester "au présent" , c'est à dire au moment même où se déroule l'instruction du programme. C'est impossible pour un évènement !

Pour les évènements il est impossible de les appréhender immédiatement en effet :

 

  • Ev1 et Ev2 sont dans le passé

  • Ev3 est dans le futur

 

Le logiciel ne peut que dépiler les évènements du passé ou attendre un évènement futur.

 

 

Exemple pour tester un ETAT :

 

 

 

 

 

 

 

 

Fonctions de gestion des EVENEMENTS

 

Selon que l’on s’intéresse aux évènements du passé ou à ceux du futur on n’utilisera pas la même fonction :

 

Pour dépiler et traiter les évènements du passé :

 

  • int SDL_PollEvent (SDL_Event *event);

 

 

Pour attendre un évènement futur :

 

  • int SDL_WaitEvent (SDL_Event *event);

 

Et lorsque, avec cette fonction, vous attendez un évènement, vous ne faites rien d’autre (le programme est en pause) ; c’est pour cela, lorsque cette instruction est utilisée dans une boucle, que l’on dit que cette fonction est bloquante.

Ceci a cependant un avantage : la consommation en temps CPU du programme est minimisée (et votre ordinateur chauffe moins) : le programme est sollicité uniquement en réponse à un évènement ; ensuite la boucle vous ramène de nouveau sur la fonction, c'est-à-dire en pause dans l’attente d’un nouvel évènement.

 

 

Vous remarquerez que ces deux fonctions renvoient un (int) :

 

              Il est indispensable de tester le retour de ces fonctions

 

 

Nous verrons l’utilisation de ces deux fonctions mais pour commencer nous allons étudier tout de suite la structure la plus classique (avec PollEvent) qui ne s’intéresse qu’aux évènements du passé.

Notons tout de suite que, puisque l’on utilise cette fonction dans une boucle et que nos ordinateurs sont très rapides, il s’agit d’un passé tout proche. On aura même l’impression, du point de vue de l’utilisateur, que nos évènements  sont traités en temps réel au fur et à mesure qu’ils apparaissent cependant il est important , vis-à-vis de la structure du programme, de comprendre qu’il s’agit d’évènements que l’on va chercher dans le passé.

    < Page précédente                                                                                                    Sommaire                                                                 > Page suivante

bottom of page