====== Différences ====== Ci-dessous, les différences entre deux révisions de la page.
allegro:timers [2011/12/05 08:48] mrhide [Timers] |
allegro:timers [2012/06/29 17:01] (Version actuelle) mrhide [Timers] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ===== Timers ===== | + | ===== Allegro — Timers ===== |
Dans cet article nous étudions les Timers, et comment les utiliser pour réguler notre boucle d'affichage. | Dans cet article nous étudions les Timers, et comment les utiliser pour réguler notre boucle d'affichage. | ||
- | ==== What Are Timers? ==== | + | ==== Que sont les Timers? ==== |
- | Timers are event sources that will send regular timed events at a given interval. | + | Ce sont des sources d'events qui déclenche un event sur un intervalle de temps régulier. |
- | ==== Why do I want Timers? ==== | + | ==== Pourquoi en ai-je besoin ==== |
- | Timers can be used to regulate your main update loop, so you only run at a given FPS, or they can be used to know when an animation needs to update, etc. | + | Ils peuvent être utilisés pour mettre à jour la boucle principale de votre jeu, ce qui vous permet de tourner à un certain FPS, ou ils peuvent être utilisés pour savoir quand une animation à besoin d'être mise à jour, etc. |
- | ==== Basic Example ==== | + | ==== Exemple basique ==== |
- | Building on the [[allegro:events#Basic_Example|previous example]] we will extend the program to have a regular update frequency. | + | Construit à partir de l'[[allegro:events#Basic_Example|exemple précédent]] afin d'avoir une fréquence d'update stable. |
<file c main.c> | <file c main.c> | ||
Ligne 26: | Ligne 26: | ||
ALLEGRO_EVENT_QUEUE *event_queue = NULL; | ALLEGRO_EVENT_QUEUE *event_queue = NULL; | ||
ALLEGRO_TIMER *timer = NULL; | ALLEGRO_TIMER *timer = NULL; | ||
+ | ALLEGRO_EVENT ev; | ||
bool redraw = true; | bool redraw = true; | ||
Ligne 66: | Ligne 67: | ||
while(1) | while(1) | ||
{ | { | ||
- | ALLEGRO_EVENT ev; | ||
al_wait_for_event(event_queue, &ev); | al_wait_for_event(event_queue, &ev); | ||
Ligne 91: | Ligne 91: | ||
</file> | </file> | ||
- | ==== Walk through ==== | + | ==== Détails ==== |
- | A few new things, and a few changed things this time. | + | Cette fois-ci nous avons quelques nouveautés et quelques modifications. |
<code c>const float FPS = 60;</code> | <code c>const float FPS = 60;</code> | ||
- | Here's the rate we want to limit our update logic to. | + | C'est le ratio pour limiter la fréquence d'update. |
<code c> timer = al_create_timer(1.0 / FPS);</code> | <code c> timer = al_create_timer(1.0 / FPS);</code> | ||
- | Initialize our timer to tick **1.0 / FPS** seconds per tick. | + | On initialise notre timer à **1.0 / FPS** seconde par tick. |
<code c> al_register_event_source(event_queue, al_get_timer_event_source(timer));</code> | <code c> al_register_event_source(event_queue, al_get_timer_event_source(timer));</code> | ||
- | Register the timer's event source in our event queue so we can fetch the events later. | + | On dirige la source d'events du timer vers notre queue de manière à les récupérer plus tard. |
<code c> al_start_timer(timer);</code> | <code c> al_start_timer(timer);</code> | ||
- | Obvious? This starts our timer. Without this, it won't generate any events. | + | évident? cette instruction démarre notre timer sans laquelle nous aurions aucun events. |
<code c> al_wait_for_event(event_queue, &ev);</code> | <code c> al_wait_for_event(event_queue, &ev);</code> | ||
- | Changed up the event handling a bit. Since we now have regular events coming in, we don't need to worry about getting stuck in the wait function. **al_wait_for_event** will wait forever if no even comes in. | + | Nous modifions un peu. Maintenant que nous avons régulièrement des events, nous n'avons plus besoin de nous inquiéter d'être bloqué par cette fonction. **al_wait_for_event** attendra un event pour toujours. |
<code c> if(event.type == ALLEGRO_EVENT_TIMER) { | <code c> if(event.type == ALLEGRO_EVENT_TIMER) { | ||
redraw = true; | redraw = true; | ||
}</code> | }</code> | ||
- | And here we check for the timer event, if this event is a timer event, trigger a redraw. If we had any game logic to take care of, it would go in here. | + | Ici nous vérifions que nous avons bien affaire à un event de type Timer, si c'est le cas, nous demandons de redessiner. Si nous devons mettre à jour la logique du jeu, nous devons aussi le faire ici. |
<code c> if(redraw && al_is_event_queue_empty(event_queue)) { | <code c> if(redraw && al_is_event_queue_empty(event_queue)) { | ||
Ligne 120: | Ligne 120: | ||
al_flip_display(); | al_flip_display(); | ||
}</code> | }</code> | ||
- | Why the crazy logical AND? We want to make sure the event queue is completely empty before we actually do our redraw, otherwise the update loop could fall very far behind. Sure, that doesn't matter right now, but it will in future examples. | + | Pourquoi mettre un AND logique ici? Nous devons être sûr que notre queue d'events est vide avant de redessiner à l'écran. Bien sur, ça n'a aucun intérêt maintenant, mais ça en aura pas la suite. |
- | So we check if redraw is true, and the queue is empty, and if both are true, we clear the current display, flip the display, clear the redraw flag, and resume the loop. | + | Donc on vérifie si **redraw** est **true**, et si la queue est vide, si les deux sont true, alors peint le display, on échange les buffers, on met redraw à **false**, et le boucle recommence. |
- | Like the previous example, this one will exit when you press the window's close button. | + | Comme dans l'exemple précédent, celui-ci se termine quand vous cliquez sur le bouton //quitter// de la fenêtre. |
<code c> al_destroy_timer(timer);</code> | <code c> al_destroy_timer(timer);</code> | ||
- | Uninstall our timer. | + | Désinstalle notre Timer . |
- | And that wraps up basic frame limiting with timers in Allegro 5. | + | Ce qui conclut notre article sur les Timers d'Allegro 5. |
- | [[allegro:events|Précédent]] << [[allegro:start|Sommaire]] >> [[allegro:bitmaps|Suivant]] | + | [[allegro:events|Précédent]] << [[allegro:start#articles|Sommaire]] >> [[allegro:bitmaps|Suivant]] |