Outils pour utilisateurs

Outils du site


allegro:events

====== Différences ====== Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

allegro:events [2011/12/05 00:02]
mrhide [Why do I want Events?]
allegro:events [2012/06/29 17:01] (Version actuelle)
mrhide [Events]
Ligne 1: Ligne 1:
-===== Events =====+===== Allegro — Events =====
  
  
Ligne 6: Ligne 6:
 ==== Que sont les Events? ==== ==== Que sont les Events? ====
  
-Les events ​vus préviennent que quelque chose s'est passé dans votre programme comme l'​appui sur une touche, le mouvement de la souris, un tick du timer, et la synchronisation du display. Allegro les utilises pour vous transmettre tout les types d'​évènements,​ et vous pouvez créer votre propres events.+Les events ​vous préviennent que quelque chose s'est passé dans votre programme comme l'​appui sur une touche, le mouvement de la souris, un tick du timer, et la synchronisation du display. Allegro les utilises pour vous transmettre tout les types d'​évènements,​ et vous pouvez créer votre propres events.
  
 ==== Pourquoi en ai-je besoin? ==== ==== Pourquoi en ai-je besoin? ====
Ligne 12: Ligne 12:
 Le système de queue d'​évènements d'​Allegro est la manière la plus efficace de gérer les events; Il vous suffit simplement d'​attendre les nouveaux events et de les traiter quand ils arrivent. Une méthode alternative utilise les requêtes, regardant constamment si un event survient. Le système d'​évènement demande bien moins de ressources processeur que la technique avec les requêtes. Le système de queue d'​évènements d'​Allegro est la manière la plus efficace de gérer les events; Il vous suffit simplement d'​attendre les nouveaux events et de les traiter quand ils arrivent. Une méthode alternative utilise les requêtes, regardant constamment si un event survient. Le système d'​évènement demande bien moins de ressources processeur que la technique avec les requêtes.
  
-==== Event Sources ====+==== Sources ​d'​events ​==== 
 +Une source d'​events est une entité qui prévient le programme que quelque chose s'est produit. Il y a plusieurs sources standards d'​events,​ par exemple les Timers, Displays, et Inputs.
  
-An event source is something that notifies the program when something has occurred. There are several standard Allegro event sources, including but not limited to Timers, Displays, and Inputs.+==== La queue d'​events ====
  
-==== Event Queues ====+Une queue d'​events,​ c'est là que sont placés les events en attente de traitement, il s'agit d'une file FIFO (first-in-first-out). Vous pouvez créer différents queues et diriger la source d'​events vers la (ou les) bonne(s) queue(s). Cependant, utiliser une seule queue est la méthode la plus simple.
  
-An event queue is where events are placed in a first-in-first-out container and are removed when the events are being handled by the main program. You may create multiple event queues and direct the event sources into the appropriate queues. However, using a single event queue is the simplest method.+==== Exemple basique ====
  
-==== Basic Example ==== +Il étend l'​exemple de la page précédentele programme permettra de quitter en cliquant sur la croix X (close) ​en haut de la fenêtre.
- +
-Extending on the previous examplewe will create a program that lets you exit by pressing the X (close) ​button on the example'​s window.+
  
 <file c main.c> <file c main.c>
Ligne 32: Ligne 31:
    ​ALLEGRO_DISPLAY *display = NULL;    ​ALLEGRO_DISPLAY *display = NULL;
    ​ALLEGRO_EVENT_QUEUE *event_queue = NULL;    ​ALLEGRO_EVENT_QUEUE *event_queue = NULL;
 +   ​ALLEGRO_EVENT ev;
 +   ​ALLEGRO_TIMEOUT timeout;
 +   bool get_event;
  
    ​if(!al_init()) {    ​if(!al_init()) {
Ligne 59: Ligne 61:
    ​while(1)    ​while(1)
    {    {
-      ALLEGRO_EVENT ev; 
-      ALLEGRO_TIMEOUT timeout; 
       al_init_timeout(&​timeout,​ 0.06);       al_init_timeout(&​timeout,​ 0.06);
       ​       ​
-      ​bool get_event = al_wait_for_event_until(event_queue,​ &ev, &​timeout);​+      get_event = al_wait_for_event_until(event_queue,​ &ev, &​timeout);​
  
       if(get_event && ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {       if(get_event && ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
Ligne 73: Ligne 73:
    }    }
    
 +   ​al_destroy_event_queue(event_queue);​
    ​al_destroy_display(display);​    ​al_destroy_display(display);​
-   ​al_destroy_event_queue(event_queue);​ 
  
    ​return 0;    ​return 0;
Ligne 80: Ligne 80:
 </​file>​ </​file>​
  
-==== Walk through ​==== +==== Détails ​====
- +
-This walk through includes code from the previous Display example. Refer to the previous tutorial'​s walk through for information on code that is not explained here.+
  
 <code c>   ​event_queue = al_create_event_queue();</​code>​ <code c>   ​event_queue = al_create_event_queue();</​code>​
  
-**al_create_event_queue** ​will return a new **ALLEGRO_EVENT_QUEUE** ​objectShould this function fail, it will return ​**NULL**. ​While failure is unlikely in this simple exampleyou are better off checking every single function that could fail for any errors. You may have fewer hidden problems when the program becomes more complicated.+**al_create_event_queue** ​retourne un objet de type **ALLEGRO_EVENT_QUEUE**. ​En cas d'​échec elle renvoi ​**NULL**. ​Cette fonction a peu de chances d'​échouer dans ce programmenous recommandons tout de même de tester la valeur renvoyée, en effet, vous pourriez avoir des soucis lorsque le programme devient plus compliqué.
  
 <code c>   ​al_register_event_source(event_queue,​ al_get_display_event_source(display));</​code>​ <code c>   ​al_register_event_source(event_queue,​ al_get_display_event_source(display));</​code>​
  
-Here we actually tie the Display ​to the event queue so we can be informed of events from the display such as the //close event//​. ​Without this function callthe display ​events will not be placed in this queue and thus will not be handled.+Ici nous dirigeons le Display ​vers notre queue de manière à être informé des event comme le //close event//​. ​Sans l'​appel à cette fonctionles events liés au display ​ne seront pas placés dans cette queue et ne seront pas traités.
  
 <code c>   ​ALLEGRO_TIMEOUT timeout; <code c>   ​ALLEGRO_TIMEOUT timeout;
    ​al_init_timeout(&​timeout,​ 0.06);    ​al_init_timeout(&​timeout,​ 0.06);
 </​code>​ </​code>​
-**al_init_timeout** ​initializes a previously defined ​**ALLEGRO_TIMEOUT** ​object. In this case we are initializing it to 0.06 seconds from nowor 60 milliseconds in the future.+**al_init_timeout** ​initialise un objet **ALLEGRO_TIMEOUT**, ici à 0.06 secondessoit 60 millisecondes.
  
-<code c>      bool got_event ​= al_wait_for_event_until(event_queue,​ &ev, &​timeout);</​code>​+<code c>      bool get_event ​= al_wait_for_event_until(event_queue,​ &ev, &​timeout);</​code>​
  
-We tell Allegro ​to wait till an event arrivesor until the time out defined previously has elapsed, which ever occurs first. **al_wait_for_event_until** ​will return ​false if it didn't return an event before the timeout.+Nous demandons à Allegro ​d'​attendre un event, ​ou que le temps défini soit écoulé. **al_wait_for_event_until** ​renverra **false** si aucun event est déclenché avant que le temps soit écoulé.
  
 <code c>      if(get_event && ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { <code c>      if(get_event && ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) {
Ligne 106: Ligne 104:
 </​code>​ </​code>​
  
-Here we check if we received an event in the event queueIf it is a Display //close event//, ​we break out of the program loop.+Ici on vérifié si nous avons un event dans la variable **ev**Si c'est un Display //close event//, ​on break la boucle du programme.
  
-That concludes our basic introduction to Events in Allegro.+Ici s'​achève notre article sur les events d'Allegro ​5
  
-[[allegro:​display|Précédent]] << [[allegro:​start|Sommaire]] >> [[allegro:​timers|Suivant]]+[[allegro:​display|Précédent]] << [[allegro:​start#articles|Sommaire]] >> [[allegro:​timers|Suivant]]
allegro/events.1323039752.txt.gz · Dernière modification: 2011/12/05 00:02 par mrhide