Allegro.cc - Online Community

Allegro.cc Forums » Programming Questions » (A5) Vaild Form of Game Loop?

This thread is locked; no one can reply to it. rss feed Print
(A5) Vaild Form of Game Loop?
Ukrzuel
Member #12,968
June 2011

Good morning,

I've used a lot of Allegro 4, and never really tried Allegro 5. Right now the biggest learning curve just seems to be getting use to these Events.

I've done a basic Game Loop, I think it's a valid one, but I'm not sure. I'm using the same Game Loops I normally do, checking logic and drawing within the same timer.

#SelectExpand
1#include <stdio.h> 2#include <allegro5/allegro.h> 3 4int main() 5{ 6 // Start Up Allegro 7 al_init(); 8 9 // Load Keyboard 10 al_install_keyboard(); 11 ALLEGRO_KEYBOARD_STATE Game_Keyboard_State; 12 13 // Create Display 14 ALLEGRO_DISPLAY *Game_Display = NULL; 15 16 Game_Display = al_create_display(640, 480); 17 18 // Create Timer 19 ALLEGRO_TIMER *Game_Timer = NULL; 20 Game_Timer = al_create_timer(1.0 / 60.00f); 21 22 // Create Events 23 ALLEGRO_EVENT_QUEUE *Game_Event_Queue = NULL; 24 Game_Event_Queue = al_create_event_queue(); 25 26 // Setup Events 27 al_register_event_source(Game_Event_Queue, al_get_display_event_source(Game_Display)); 28 al_register_event_source(Game_Event_Queue, al_get_timer_event_source(Game_Timer)); 29 al_register_event_source(Game_Event_Queue, al_get_keyboard_event_source()); 30 31 // Start Timer 32 al_start_timer(Game_Timer); 33 34 35 bool Game_Running = true; 36 bool Game_Drawing = true; 37 38 // TEST 39 bool Cycle = false; 40 bool Allow_Flash = false; 41 42 // ================= 43 // GAME LOOP - START 44 // ================= 45 46 while (Game_Running) 47 { 48 // Draw 49 if (Game_Drawing) 50 { 51 if (Allow_Flash) 52 { 53 if (Cycle) 54 { 55 al_clear_to_color(al_map_rgb(255, 255, 255)); 56 Cycle = false; 57 } 58 else 59 { 60 al_clear_to_color(al_map_rgb(0, 0, 0)); 61 Cycle = true; 62 } 63 64 al_flip_display(); 65 } 66 67 if (!Allow_Flash) 68 { 69 al_clear_to_color(al_map_rgb(255, 0, 0)); 70 al_flip_display(); 71 } 72 73 Game_Drawing = false; 74 } 75 76 while (1) 77 { 78 // Logic 79 ALLEGRO_EVENT ev; 80 al_wait_for_event(Game_Event_Queue, &ev); 81 82 if (ev.type == ALLEGRO_EVENT_TIMER) 83 { 84 al_get_keyboard_state(&Game_Keyboard_State); // Get Keyboard State 85 if (al_key_down(&Game_Keyboard_State, ALLEGRO_KEY_SPACE)) 86 { 87 Allow_Flash = true; 88 } 89 else 90 { 91 Allow_Flash = false; 92 } 93 94 95 Game_Drawing = true; 96 } 97 else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) 98 { 99 Game_Drawing = false; 100 Game_Running = false; 101 break; 102 } 103 104 if (al_is_event_queue_empty(Game_Event_Queue)) 105 { 106 break; 107 } 108 } 109 } 110 111 // ================= 112 // GAME LOOP - END 113 // ================= 114 115 // Destroy 116 al_destroy_timer(Game_Timer); 117 al_destroy_display(Game_Display); 118 al_destroy_event_queue(Game_Event_Queue); 119 120}

If this doesn't work fully as a valid Game Loop, please let me know what I can do better. I really want to get started with development once again with Allegro! :) I really enjoyed Allegro 4, other than the software rendering.

- AKA Black-Rook

Elias
Member #358
May 2000

Yes, this should work fine. The only difference to the tutorial game loop is that you do the very first redrawing before the first call to al_wait_for_event.

--
"Either help out or stop whining" - Evert

Ukrzuel
Member #12,968
June 2011

Thank you very much!

I will look into the other way as well, just for my reference.

- AKA Black-Rook

Go to: