In case the Allegro functions themselves are not clear :
Generally, you want to use one queue for everything. This way, when you look in the queue, you get events in the correct order : "First the user pressed A, then he moved the mouse..."
Another question is: If I have a lot of rendering animation, how do I submit them to the queue.
Normally, you separate in two functions :
LOGIC (game logic) :
- runs 60 times per second (for example)
- takes user input into account
- takes all decisions
- performs "physics" : Every execution of the function models what happens in 1/60 second
- selects the current image of animations (ex : Run loop, images 1 2 3 4 1 2 3 4...). The information needs to be stored in memory, not drawn.
- is the one that creates and deletes game elements (bullets,...)
- can start sound effects
- only needed after a logic step has run
- can be done after several logic steps if the computer is too slow (it is called frame skipping)
- only places graphic elements on the screen
When you have this separation, all the code in logic is fast. You can then use a timer event at 1/60s to run logic, and every time the event queue is empty, you can call the draw function to update the screen.