<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>game loop</title>
		<link>http://www.allegro.cc/forums/view/608240</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 03 Sep 2011 06:23:15 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>How should a good game loop looks like ?<br />I mean I&#39;ve got something like:</p><p>	</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>   <span class="k1">while</span><span class="k2">(</span><span class="n">1</span><span class="k2">)</span>
<span class="number">  2</span>   <span class="k2">{</span>
<span class="number">  3</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number">  4</span>      <span class="k1">bool</span> get_event <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_wait_for_event_timed"><span class="a">al_wait_for_event_timed</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>ev, <span class="n">0</span>.<span class="n">05f</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span> 
<span class="number">  6</span>      <span class="k1">if</span><span class="k2">(</span>get_event <span class="k3">&amp;</span><span class="k3">&amp;</span> ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  7</span>         <span class="k1">break</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>parseEvent<span class="k2">(</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="c">// game logic and stuff</span>
<span class="number"> 12</span>      <span class="k2">}</span>
</div></div><p>

but let&#39;s assume that game logic takes time, lets say 1/4 second. If in that time user press a button or generate any other event it&#39;ll be missed ?<br />Or the event will be generated and will set get_event on true next time al_wait_for_event will be executed?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mentalDisorder)</author>
		<pubDate>Sat, 03 Sep 2011 03:22:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/608240/929907#target">mentalDisorder</a> said:</div><div class="quote"><p>
lets say 1/4 second
</p></div></div><p>
That is an extremely long time for most game loops. Most likely your game loop will take less than 10ms to execute.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Or the event will be generated and will set get_event on true next time al_wait_for_event will be executed?
</p></div></div><p>
The events will sit in the queue until you get them out, so to answer your question, yes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Sat, 03 Sep 2011 03:30:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>after testing couple of function I guess that al_wait_for_event_until(...) is best option, right?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mentalDisorder)</author>
		<pubDate>Sat, 03 Sep 2011 03:38:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There is an example on the wiki somewhere, but this is better than using a timed wait because it always waits until there is an event, processes all the remaining events, and draws when the timer goes off :
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>
<span class="number">  2</span><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  3</span>   <span class="k1">do</span> <span class="k2">{</span>
<span class="number">  4</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number">  5</span>      <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>queue , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>      game.ProcessInput<span class="k2">(</span><span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>      <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  9</span>         game.UpdateLogic<span class="k2">(</span><span class="n">1</span>.<span class="n">0</span><span class="k3">/</span>FRAMES_PER_SECOND<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>         redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 11</span>      <span class="k2">}</span>
<span class="number"> 12</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_BLAH2<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>         <span class="c">// do other stuff</span>
<span class="number"> 14</span>      <span class="k2">}</span>
<span class="number"> 15</span>   <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>   <span class="k1">if</span> <span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>      redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 18</span>      game.Display<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>   <span class="k2">}</span>
<span class="number"> 20</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 03 Sep 2011 06:23:15 +0000</pubDate>
	</item>
</rss>
