====== Différences ====== Ci-dessous, les différences entre deux révisions de la page.
allegro:input [2011/12/05 15:36] mrhide [Input] |
allegro:input [2012/08/27 03:33] (Version actuelle) mrhide [Détails] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ===== Input ===== | + | ===== Allegro — Input ===== |
Cet article explique le fonction de l'Input clavier et souris. | Cet article explique le fonction de l'Input clavier et souris. | ||
- | ==== Basic Mouse Example ==== | + | ===== Exemple basique d'Input souris ===== |
- | Building on the Basic Bitmaps example, we change the box to move with the mouse. | + | Basé sur l'exemple de l'article précédent, la //boite// suit la souris dans cet exemple. |
<file c main.c> | <file c main.c> | ||
Ligne 124: | Ligne 124: | ||
}</file> | }</file> | ||
- | === Walk through === | + | ==== Détails ==== |
- | Much like previous examples we will only go over the new bits. | + | On ne détaille ici que les nouveautés. |
<code c> if(!al_install_mouse()) { | <code c> if(!al_install_mouse()) { | ||
Ligne 132: | Ligne 132: | ||
return -1; | return -1; | ||
}</code> | }</code> | ||
- | Setup the mouse subsystem. **al_install_mouse** returns false if it fails, and we exit if that happens. | + | Initialise la gestion de la souris. **al_install_mouse** renvoie false en cas d'échec, dans ce cas on quitte le programme. |
<code c> al_register_event_source(event_queue, al_get_mouse_event_source());</code> | <code c> al_register_event_source(event_queue, al_get_mouse_event_source());</code> | ||
- | Register the mouse's event source with our event queue. Without this we won't get any mouse events. | + | Dirige la source d'event de la souris vers notre queue d'events. Nécessaire pour obtenir les events liés à la souris. |
<code c> else if(ev.type == ALLEGRO_EVENT_MOUSE_AXES || | <code c> else if(ev.type == ALLEGRO_EVENT_MOUSE_AXES || | ||
Ligne 143: | Ligne 143: | ||
bouncer_y = ev.mouse.y; | bouncer_y = ev.mouse.y; | ||
}</code> | }</code> | ||
- | A **ALLEGRO_EVENT_MOUSE_AXES** event is generated when the mouse is moved by the user, and a **ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY** is generated when ever the mouse enters the display. Here we update our box's position to the mouse position received. | + | Un event de type **ALLEGRO_EVENT_MOUSE_AXES** est généré sur un déplacement de la souris par l'utilisateur, et un event de type **ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY** est généré quand la souris entre dans notre display. Ici on met à jour la position de notre boite aux coordonnées de la souris. |
<code c> else if(ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_UP) { | <code c> else if(ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_UP) { | ||
break; | break; | ||
}</code> | }</code> | ||
- | Should any mouse button be pressed, immediately exit. | + | Termine le programme en cas d'appui sur n'importe quel bouton de la souris. |
- | That was pretty simple no? | + | C'était plutôt simple non? |
- | ==== Basic Keyboard Example ==== | + | **ATTENTION !!** L'event source de la souris flood, pour éviter d'avoir un jeu qui lag, je recommande de vérifier que l'event queue est vide avant de faire l'affichage, ou mieux, d'utiliser deux event queues, une pour actualiser l'affichage et une autre qui gère l'input. avec un thread pour les exécuter en même temps. |
- | Building upon the Basic Bitmaps example, we will learn to use the keyboard events. | + | ===== Exemple basique d'Input clavier ===== |
+ | |||
+ | Basé sur l'exemple de l'article précédent, la boite suit la direction selon les touches du clavier | ||
<file c main.c> | <file c main.c> | ||
Ligne 327: | Ligne 329: | ||
}</file> | }</file> | ||
- | === Walk-through === | + | ==== Détails ==== |
<code c>enum MYKEYS { | <code c>enum MYKEYS { | ||
KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT | KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT | ||
};</code> | };</code> | ||
- | Define ourselves some key constants to use with our key state array. | + | On définit nous-même ces constantes des touches qu'on utilisera dans le tableau des status des touches. |
<code c>bool key[4] = { false, false, false, false };</code> | <code c>bool key[4] = { false, false, false, false };</code> | ||
- | Define our key state array. This is where we'll store the state of the keys we're interested in. | + | C'est notre tableau des status des touches, dans lequel on stockera le status des touches qui nous intéresse. |
<code c> bool doexit = false;</code> | <code c> bool doexit = false;</code> | ||
- | Define a flag to short circuit our while loop. | + | Cette variable pour court-circuiter notre boucle While. |
<code c> if(!al_install_keyboard()) { | <code c> if(!al_install_keyboard()) { | ||
Ligne 344: | Ligne 346: | ||
return -1; | return -1; | ||
}</code> | }</code> | ||
- | Initialize the keyboard subsystem. **al_install_keyboard** will return false if it fails, we exit if that happens. | + | Initialise la gestion du clavier. **al_install_keyboard** retourne false en cas d'échec, on termine le programme si ça arrive. |
<code c> al_register_event_source(event_queue, al_get_keyboard_event_source());</code> | <code c> al_register_event_source(event_queue, al_get_keyboard_event_source());</code> | ||
- | Register the keyboard event source with our event queue. Without this we will never get any keyboard events. | + | Dirige la source d'event du clavier vers notre queue d'events. Nécessaire pour obtenir les events liés au clavier. |
<code c> while(!doexit)</code> | <code c> while(!doexit)</code> | ||
- | Change up our while loop to exit should **doexit** be true. Gives us a cheap way to exit. | + | Permet de sortie de la boucle while dès que **doexit** passe à true. Une manière simple de quitter. |
<code c> if(key[KEY_UP] && bouncer_y >= 4.0) { | <code c> if(key[KEY_UP] && bouncer_y >= 4.0) { | ||
Ligne 367: | Ligne 369: | ||
bouncer_x += 4.0; | bouncer_x += 4.0; | ||
}</code> | }</code> | ||
- | Here we check to see if one of our keys are down, and move our box in the direction of the key press. | + | On vérifie si l'une de nos touches a été pressée, et on déplace notre boite dans la direction voulue. |
- | To save a bit of space and effort, we're going to go through both key events in parallel. | + | Pour économiser un peu de place et d'efforts, To save a bit of space and effort, we're going to go through both key events in parallel. |
<code c> else if(ev.type == ALLEGRO_EVENT_KEY_DOWN) {</code> | <code c> else if(ev.type == ALLEGRO_EVENT_KEY_DOWN) {</code> | ||
- | The **ALLEGRO_EVENT_KEY_DOWN** event is generated whenever a key is pressed. | + | Un event de type **ALLEGRO_EVENT_KEY_DOWN** est généré quand une touche est pressée. |
<code c> else if(ev.type == ALLEGRO_EVENT_KEY_UP) {</code> | <code c> else if(ev.type == ALLEGRO_EVENT_KEY_UP) {</code> | ||
- | The **ALLEGRO_EVENT_KEY_UP** event is generated whenever a key is released. | + | Un event de type **ALLEGRO_EVENT_KEY_UP** est généré quand une touche est relachée. |
<code c> switch(ev.keyboard.keycode) {</code> | <code c> switch(ev.keyboard.keycode) {</code> | ||
- | We switch on the **keycode** member of the keyboard event structure. The **keycode** member contains an integer mapping to an allegro keycode. | + | On switch sur le membre **keycode** de la structure keyboard event. **keycode** contient un entier de la cartographie clavier d'allegro. |
<code c> case ALLEGRO_KEY_*: | <code c> case ALLEGRO_KEY_*: | ||
key[KEY_*] = true; || key[KEY_*] = false; | key[KEY_*] = true; || key[KEY_*] = false; | ||
break;</code> | break;</code> | ||
- | With both the key press and release events, we store the state of the pressed key into our **key[]** array. | + | Dans les deux types d'event reçus, on stocke l'état de la touche dans notre tableau **key[]**. |
<code c> case ALLEGRO_KEY_ESC: | <code c> case ALLEGRO_KEY_ESC: | ||
doexit = true; | doexit = true; | ||
break;</code> | break;</code> | ||
- | Here we set our **doexit** flag to true, to cause the loop to exit the next time through. | + | Ici on passe **doexit** à true pour terminer la boucle au prochain tour. |
- | Whew. A bit longer than the mouse example, but still pretty simple. | + | Un peu plus long que l'exemple sur la souris, mais tout aussi simple. |
- | [[allegro:bitmaps|Précédent]] << [[allegro:start|Sommaire]] >> [[allegro:threads|Suivant]] | + | [[allegro:bitmaps|Précédent]] << [[allegro:start#articles|Sommaire]] >> [[allegro:threads|Suivant]] |