<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>From A4 to A5: questions (console window, key presses,timers/sprite animation)</title>
		<link>http://www.allegro.cc/forums/view/607607</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 19 Jun 2011 03:00:07 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok I managed to install and configure A5 on MSVS 2010...<br />Using allegro-5.0.3-monolith-mt-debug.dll for debug and allegro-5.0.3-monolith-mt.dll for release. </p><p>First question: Are these the good dll&#39;s I should be using if I want to distribute my game to other PCs ?</p><p>Second question: I see A5 brings a console window with it every time I run the project, in debug and even in release. How can I remove the window in release only ?</p><p>Third question: </p><p>this is my A4 menu:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span>
   <span class="k2">{</span><a href="http://www.allegro.cc/manual/rest"><span class="a">rest</span></a><span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
       <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_1<span class="k2">]</span><span class="k2">)</span>
     <span class="k2">{</span><span class="c">//play }</span>
     <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_2<span class="k2">]</span><span class="k2">)</span>
     <span class="k2">{</span><span class="c">//load }</span>
</pre></div></div><p>

how would this work in A5 ? I read about the events stuff but I can&#39;t seem to grasp the concept for single key presses like menu navigation.</p><p>Oww and how can I get input from the user? I now use:</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>string  edittext<span class="k2">;</span>  
<span class="number">  2</span>string::iterator iter <span class="k3">=</span> edittext.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// string iterator</span>
<span class="number">  3</span><span class="k1">int</span> caret  <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>                          <span class="c">// tracking purposes yarr!</span>
<span class="number">  4</span><span class="k1">bool</span> insert <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>             
<span class="number">  5</span><span class="k1">if</span> <span class="k2">(</span>player.getname<span class="k2">(</span><span class="k2">)</span><span class="k3">=</span><span class="k3">=</span><span class="s">""</span><span class="k2">)</span>
<span class="number">  6</span>      <span class="k2">{</span><a href="http://www.allegro.cc/manual/textout_ex"><span class="a">textout_ex</span></a><span class="k2">(</span> <a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a>, blood, <span class="s">"ENTER YOUR NAME:"</span>, <span class="n">100</span>, <span class="n">65</span>, white,<span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>    <span class="k1">do</span>   <span class="k2">{</span><a href="http://www.allegro.cc/manual/rest"><span class="a">rest</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>  <span class="k1">while</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/keypressed"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  8</span>      <span class="k2">{</span>  <span class="k1">int</span>  newkey   <span class="k3">=</span> <a href="http://www.allegro.cc/manual/readkey"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>         <span class="k1">char</span> ASCII    <span class="k3">=</span> newkey <span class="k3">&amp;</span> <span class="n">0xff</span><span class="k2">;</span>
<span class="number"> 10</span>         <span class="k1">char</span> scancode <span class="k3">=</span> newkey <span class="k3">&gt;</span><span class="k3">&gt;</span> <span class="n">8</span><span class="k2">;</span>
<span class="number"> 11</span> 
<span class="number"> 12</span>         <span class="c">// a character key was pressed; add it to the string</span>
<span class="number"> 13</span>         <span class="k1">if</span><span class="k2">(</span>ASCII <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">32</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> ASCII <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">126</span><span class="k2">)</span>
<span class="number"> 14</span>         <span class="k2">{</span>  <span class="c">// add the new char, inserting or replacing as need be</span>
<span class="number"> 15</span>          
<span class="number"> 16</span>     <span class="k1">if</span><span class="k2">(</span>insert <span class="k3">|</span><span class="k3">|</span> iter <span class="k3">=</span><span class="k3">=</span> edittext.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 17</span>               iter <span class="k3">=</span> edittext.insert<span class="k2">(</span>iter, ASCII<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>            <span class="k1">else</span>
<span class="number"> 19</span>               edittext.replace<span class="k2">(</span>caret, <span class="n">1</span>, <span class="n">1</span>, ASCII<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span> 
<span class="number"> 21</span>            <span class="c">// increment both the caret and the iterator</span>
<span class="number"> 22</span>            sound.playclick1<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>        caret<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 24</span>            iter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>         <span class="k2">}</span>
<span class="number"> 27</span>         <span class="c">// some other, "special" key was pressed; handle it here</span>
<span class="number"> 28</span>         <span class="k1">else</span>
<span class="number"> 29</span>            <span class="k1">switch</span><span class="k2">(</span>scancode<span class="k2">)</span>
<span class="number"> 30</span>            <span class="k2">{</span>    <span class="k1">case</span> KEY_DEL:
<span class="number"> 31</span>                  <span class="k1">if</span><span class="k2">(</span>iter <span class="k3">!</span><span class="k3">=</span> edittext.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> iter <span class="k3">=</span> edittext.erase<span class="k2">(</span>iter<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>               <span class="k1">break</span><span class="k2">;</span> 
<span class="number"> 33</span>               <span class="k1">case</span> KEY_BACKSPACE:
<span class="number"> 34</span>                  <span class="k1">if</span><span class="k2">(</span>iter <span class="k3">!</span><span class="k3">=</span> edittext.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 35</span>                  <span class="k2">{</span>  sound.playclick2<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>                     caret--<span class="k2">;</span>
<span class="number"> 37</span>                     iter--<span class="k2">;</span>
<span class="number"> 38</span>                     iter <span class="k3">=</span> edittext.erase<span class="k2">(</span>iter<span class="k2">)</span><span class="k2">;</span>                  <span class="k2">}</span>
<span class="number"> 39</span>               <span class="k1">break</span><span class="k2">;</span> 
<span class="number"> 40</span>               <span class="k1">case</span> KEY_RIGHT:
<span class="number"> 41</span>                  <span class="k1">if</span><span class="k2">(</span>iter <span class="k3">!</span><span class="k3">=</span> edittext.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>   caret<span class="k3">+</span><span class="k3">+</span>, iter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 42</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 43</span>                <span class="k1">case</span> KEY_LEFT:
<span class="number"> 44</span>                  <span class="k1">if</span><span class="k2">(</span>iter <span class="k3">!</span><span class="k3">=</span> edittext.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> caret--, iter--<span class="k2">;</span>
<span class="number"> 45</span>               <span class="k1">break</span><span class="k2">;</span> 
<span class="number"> 46</span>               <span class="k1">case</span> KEY_INSERT:
<span class="number"> 47</span>                  <span class="k1">if</span><span class="k2">(</span>insert<span class="k2">)</span> insert <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="k1">else</span> insert <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 48</span>               <span class="k1">break</span><span class="k2">;</span> 
<span class="number"> 49</span>               default: 
<span class="number"> 50</span>               <span class="k1">break</span><span class="k2">;</span>   <span class="k2">}</span>     <span class="k2">}</span> 
<span class="number"> 51</span>     
<span class="number"> 52</span>      clear<span class="k2">(</span>namebuffer<span class="k2">)</span><span class="k2">;</span> 
<span class="number"> 53</span>     
<span class="number"> 54</span>      textout<span class="k2">(</span>namebuffer, blood, edittext.c_str<span class="k2">(</span><span class="k2">)</span>, <span class="n">100</span>, <span class="n">100</span>, white<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>      <a href="http://www.allegro.cc/manual/blit"><span class="a">blit</span></a><span class="k2">(</span>namebuffer, <a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">50</span>, <span class="n">90</span>, <span class="n">820</span>, <span class="n">240</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 56</span>     
<span class="number"> 57</span>   <span class="k2">}</span> <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_ENTER<span class="k2">]</span><span class="k3">|</span><span class="k3">|</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_ENTER_PAD<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 58</span>   sound.playclick1<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 59</span>   player.nameset<span class="k2">(</span>edittext<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
</div></div><p>

This is to get the player&#39;s name and store in in a class... I really don&#39;t think it will work in A5...</p><p>4&#39;th Question: <br />This is how my game loop works in A4:
</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">void</span> increment_speed_counter2<span class="k2">(</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>speed_counter2<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  3</span><a href="http://www.allegro.cc/manual/END_OF_FUNCTION"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>increment_speed_counter<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span><a href="http://www.allegro.cc/manual/LOCK_VARIABLE"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>speed_counter2<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span><a href="http://www.allegro.cc/manual/LOCK_FUNCTION"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>increment_speed_counter2<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span><a href="http://www.allegro.cc/manual/install_int_ex"><span class="a">install_int_ex</span></a><span class="k2">(</span>increment_speed_counter2,BPS_TO_TIMER<span class="k2">(</span><span class="n">100</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">while</span> <span class="k2">(</span>speed_counter2 <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 10</span><span class="k2">{</span><span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k3">|</span><span class="k3">|</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_W<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 11</span>  <span class="k2">{</span>player.move<span class="k2">(</span><span class="n">8</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span> <span class="c">//this changes the player's X position via a class</span>
<span class="number"> 12</span>
<span class="number"> 13</span>speed_counter2--<span class="k2">;</span> <span class="c">//this was the logic loop</span>
<span class="number"> 14</span><span class="k2">}</span>
<span class="number"> 15</span>
<span class="number"> 16</span><span class="k1">if</span><span class="k2">(</span>player.Direction<span class="k2">(</span><span class="k2">)</span><span class="k3">=</span><span class="k3">=</span><span class="n">8</span><span class="k2">)</span>
<span class="number"> 17</span><span class="k2">{</span><span class="k2">}</span>   <span class="c">//drawing of sprite depending on what frame it is at.</span>
<span class="number"> 18</span>
<span class="number"> 19</span><span class="k1">if</span><span class="k2">(</span>bla bla<span class="k2">)</span> 
<span class="number"> 20</span><span class="k2">{</span><span class="k2">}</span>               <span class="c">//this is also where I do damage handling stuff, sounds etc</span>
<span class="number"> 21</span>
<span class="number"> 22</span><span class="k1">if</span><span class="k2">(</span>drawingtoscreen<span class="k3">=</span><span class="k3">=</span><span class="n">1</span><span class="k2">)</span>
<span class="number"> 23</span><span class="k2">{</span>draw all the different stuff on to a buffer then on to the screen.<span class="k2">}</span>
<span class="number"> 24</span><span class="k2">}</span>
</div></div><p>

so the question is... the same principle applies in A5 ? logic check then drawing stuff? </p><p>That would be all , thanks in advance for your help <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alex Ioan)</author>
		<pubDate>Tue, 14 Jun 2011 23:51:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>First off, please use consistent indentation - don&#39;t have code on the same line after an opening brace, line up code blocks, and indent every time you enter a new block. It makes it so much more pleasant to read (and help fix your problems).</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607607/921375#target">ALEXAROTH</a> said:</div><div class="quote"><p>
First question: Are these the good dll&#39;s I should be using if I want to distribute my game to other PCs ?
</p></div></div><p>
If you&#39;re linking to the libraries that came with them, then yes those are the dll&#39;s you want to distribute with your program.</p><div class="quote_container"><div class="title">ALEXAROTH said:</div><div class="quote"><p>
Second question: I see A5 brings a console window with it every time I run the project, in debug and even in release. How can I remove the window in release only ?
</p></div></div><p>
There should be a setting in MSVC that allows you to change whether the program is compiled as a console program or a graphical program. Look for subsystem::windowed or something like that in your settings.</p><div class="quote_container"><div class="title">ALEXAROTH said:</div><div class="quote"><p>
Third question: </p><p>this is my A4 menu:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span>
   <span class="k2">{</span><a href="http://www.allegro.cc/manual/rest"><span class="a">rest</span></a><span class="k2">(</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
       <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_1<span class="k2">]</span><span class="k2">)</span>
     <span class="k2">{</span><span class="c">//play }</span>
     <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_2<span class="k2">]</span><span class="k2">)</span>
     <span class="k2">{</span><span class="c">//load }</span>
</pre></div></div><p>
how would this work in A5 ? I read about the events stuff but I can&#39;t seem to grasp the concept for single key presses like menu navigation.
</p></div></div><p>
If you want to know whether a key is up or down, there are two ways to detect this in Allegro 5.<br />1) Use ALLEGRO_EVENT_KEY_DOWN and ALLEGRO_EVENT_KEY_UP to track when the keys are pressed and released (and therefore, when they are up or down).<br />2) Use <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a></span> and <span class="source-code"><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a></span>. The problem with these is that they will never contain the substates of the keys between checks to al_get_keyboard_state. If you use method 1, you will never have this problem.</p><div class="quote_container"><div class="title">ALEXAROTH said:</div><div class="quote"><p>
Oww and how can I get input from the user? I now use:<br />...<br />This is to get the player&#39;s name and store in in a class... I really don&#39;t think it will work in A5...
</p></div></div><p>
Use <span class="source-code"><a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a></span> and check the event type for equivalence to ALLEGRO_EVENT_KEY_CHAR. It will work in A5 just fine...</p><div class="quote_container"><div class="title">ALEXAROTH said:</div><div class="quote"><p>
4&#39;th Question: <br />This is how my game loop works in A4:<br />...Code...<br />so the question is... the same principle applies in A5 ? logic check then drawing stuff? 
</p></div></div><p>
Yes, in A5 you process events until there aren&#39;t any, and for each tick of the timer you process your logic and set a redraw flag. Then when you&#39;re done with all the events, you check your redraw flag and draw if necessary.</p><div class="quote_container"><div class="title">ALEXAROTH said:</div><div class="quote"><p>
That would be all , thanks in advance for your help
</p></div></div><p>
You&#39;ll probably want to look at several things from the manual :<br />1) <a href="http://www.allegro.cc/manual/5/events.html">Events</a><br />2) <a href="http://www.allegro.cc/manual/5/keyboard.html">Keyboard</a></p><p>You should also take a look at the <a href="http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial">tutorials for A5</a> on the wiki, and the <a href="http://wiki.allegro.cc/index.php?title=Porting_from_A4_to_A5">Porting guide from A4 to A5</a> on the wiki.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 15 Jun 2011 05:48:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the response ! </p><p>I got the release version working without the console ! <br />If other MSVS users: Project Properties-&gt;Linker-&gt;System-&gt;Windows </p><p>But I still can&#39;t figure out how to do the menu navigation...<br />I mean I know how to check if a key was pressed and released but I tried thinking about implementing it into making a menu and still can&#39;t figure out how to make a simple menu with multiple submenus. Am I broken ? even in A4 I did some stupid loops inside more loops waiting for a keypress... Any concept ideas on how to make such a menu ?</p><p>&quot;Use al_wait_for_event and check the event type for equivalence to ALLEGRO_EVENT_KEY_CHAR.&quot;<br />in my example, should I use al_wait_for_event instead of while (keypressed()) ?</p><p>and what do to about 
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span>  newkey   <span class="k3">=</span> <a href="http://www.allegro.cc/manual/readkey"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
?</p><p>and 
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">switch</span><span class="k2">(</span>scancode<span class="k2">)</span>
 <span class="n">30</span>            <span class="k2">{</span>    <span class="k1">case</span> KEY_DEL: <span class="c">//....</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alex Ioan)</author>
		<pubDate>Wed, 15 Jun 2011 11:10:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><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">class</span> Menu<span class="k2">;</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="k1">class</span> MenuItem <span class="k2">{</span>
<span class="number">  4</span><span class="k1">private</span> <span class="k2">:</span>
<span class="number">  5</span>   <span class="k1">int</span> x<span class="k2">;</span>
<span class="number">  6</span>   <span class="k1">int</span> y<span class="k2">;</span>
<span class="number">  7</span>   <span class="k1">int</span> w<span class="k2">;</span>
<span class="number">  8</span>   <span class="k1">int</span> h<span class="k2">;</span>
<span class="number">  9</span>   string text<span class="k2">;</span>
<span class="number"> 10</span>   Menu<span class="k3">*</span> submenu<span class="k2">;</span>
<span class="number"> 11</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number"> 12</span>   MenuItem<span class="k2">(</span><span class="k1">int</span> xpos , <span class="k1">int</span> ypos , <span class="k1">int</span> width , <span class="k1">int</span> height , string textstr<span class="k2">)</span> <span class="k2">:</span>
<span class="number"> 13</span>      x<span class="k2">(</span>xpos<span class="k2">)</span>,
<span class="number"> 14</span>      y<span class="k2">(</span>ypos<span class="k2">)</span>,
<span class="number"> 15</span>      w<span class="k2">(</span>width<span class="k2">)</span>,
<span class="number"> 16</span>      h<span class="k2">(</span>height<span class="k2">)</span>,
<span class="number"> 17</span>      text<span class="k2">(</span>textstr<span class="k2">)</span>,
<span class="number"> 18</span>      submenu<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>
<span class="number"> 19</span>   <span class="k2">{</span><span class="k2">}</span>
<span class="number"> 20</span>   <span class="k1">void</span> SetPosition<span class="k2">(</span><span class="k1">int</span> xpos , <span class="k1">int</span> ypos , <span class="k1">int</span> width , <span class="k1">int</span> height<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 21</span>      x <span class="k3">=</span> xpos<span class="k2">;</span>
<span class="number"> 22</span>      y <span class="k3">=</span> ypos<span class="k2">;</span>
<span class="number"> 23</span>      w <span class="k3">=</span> width<span class="k2">;</span>
<span class="number"> 24</span>      h <span class="k3">=</span> height<span class="k2">;</span>
<span class="number"> 25</span>      <span class="k1">if</span> <span class="k2">(</span>submenu<span class="k2">)</span> <span class="k2">{</span>submenu-&gt;SetPosition<span class="k2">(</span>x <span class="k3">+</span> w , y<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 26</span>   <span class="k2">}</span>
<span class="number"> 27</span><span class="k2">}</span>
<span class="number"> 28</span>
<span class="number"> 29</span><span class="k1">class</span> Menu <span class="k2">{</span>
<span class="number"> 30</span><span class="k1">private</span> <span class="k2">:</span>
<span class="number"> 31</span>   <span class="k1">int</span> x<span class="k2">;</span>
<span class="number"> 32</span>   <span class="k1">int</span> y<span class="k2">;</span>
<span class="number"> 33</span>   <span class="k1">int</span> w<span class="k2">;</span>
<span class="number"> 34</span>   <span class="k1">int</span> h<span class="k2">;</span>
<span class="number"> 35</span>   vector<span class="k3">&lt;</span>MenuItem<span class="k3">*</span><span class="k3">&gt;</span> items<span class="k2">;</span>
<span class="number"> 36</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number"> 37</span>   Menu<span class="k2">(</span><span class="k1">int</span> xpos , <span class="k1">int</span> ypos , <span class="k1">int</span> width , <span class="k1">int</span> height<span class="k2">)</span> <span class="k2">:</span>
<span class="number"> 38</span>      x<span class="k2">(</span>xpos<span class="k2">)</span>,
<span class="number"> 39</span>      y<span class="k2">(</span>ypos<span class="k2">)</span>,
<span class="number"> 40</span>      w<span class="k2">(</span>width<span class="k2">)</span>,
<span class="number"> 41</span>      h<span class="k2">(</span>height<span class="k2">)</span>,
<span class="number"> 42</span>      items<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 43</span>   <span class="k2">{</span><span class="k2">}</span>
<span class="number"> 44</span>   <span class="k1">void</span> SetPosition<span class="k2">(</span><span class="k1">int</span> xpos , <span class="k1">int</span> ypos<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 45</span>      x <span class="k3">=</span> xpos<span class="k2">;</span>
<span class="number"> 46</span>      y <span class="k3">=</span> ypos<span class="k2">;</span>
<span class="number"> 47</span>      <span class="k1">int</span> ix <span class="k3">=</span> xpos<span class="k2">;</span>
<span class="number"> 48</span>      <span class="k1">int</span> iy <span class="k3">=</span> ypos<span class="k2">;</span>
<span class="number"> 49</span>      <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> i <span class="k3">&lt;</span> items.size<span class="k2">(</span><span class="k2">)</span> <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 50</span>         items<span class="k2">[</span>i<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>SetPosition<span class="k2">(</span>ix , iy , w , h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>      <span class="k2">}</span>
<span class="number"> 52</span>   <span class="k2">}</span>
<span class="number"> 53</span><span class="k2">}</span>
<span class="number"> 54</span>
<span class="number"> 55</span>
<span class="number"> 56</span>
<span class="number"> 57</span><span class="k1">void</span> MenuItem::SetMenu<span class="k2">(</span>Menu<span class="k3">*</span> menu<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 58</span>   submenu <span class="k3">=</span> menu<span class="k2">;</span>
<span class="number"> 59</span>   <span class="k1">if</span> <span class="k2">(</span>submenu<span class="k2">)</span> <span class="k2">{</span>submenu-&gt;SetPosition<span class="k2">(</span>x <span class="k3">+</span> w , y<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 60</span><span class="k2">}</span>
</div></div><p>

That should give you a basic idea of a setup for a menu. You&#39;ll have to implement hit checks and drawing yourself.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607607/921472#target">ALEXAROTH</a> said:</div><div class="quote"><p>
&quot;Use al_wait_for_event and check the event type for equivalence to ALLEGRO_EVENT_KEY_CHAR.&quot;<br />in my example, should I use al_wait_for_event instead of while (keypressed()) ?
</p></div></div><p>
Yes, you can use <span class="source-code"><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a></span> to check if there are any events in the queue. When you get a KEY_CHAR event, send the keycode and the unichar field to your input object to be processed. Check the keycode first to process things like left/right/backspace/delete and if the keycode wasn&#39;t used then check the unichar field.</p><p>I&#39;m not totally sure how unicode works, but I think you can get away with checking to see if the value is greater than or equal to 32 then I <b>think</b> it will be a printable character. You&#39;ll want to take a look at the <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a></span> type.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 15 Jun 2011 11:33:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><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>string edittext<span class="k2">;</span>  
<span class="number">  3</span>string::iterator iter <span class="k3">=</span> edittext.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number">  4</span><span class="k1">int</span> caret  <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>                          
<span class="number">  5</span><span class="k1">bool</span> insert <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>             
<span class="number">  6</span><span class="k1">if</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span>
<span class="number">  7</span>      <span class="k2">{</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">  8</span>    <span class="k1">do</span>   <span class="k2">{</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>event_queue, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>   
<span class="number">  9</span>      <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_CHAR<span class="k2">)</span>
<span class="number"> 10</span>      <span class="k2">{</span> 
<span class="number"> 11</span>      <span class="k1">int</span>  newkey   <span class="k3">=</span> ev.keyboard.unichar<span class="k2">;</span>
<span class="number"> 12</span>         <span class="k1">char</span> ASCII    <span class="k3">=</span> newkey <span class="k3">&amp;</span> <span class="n">0xff</span><span class="k2">;</span>
<span class="number"> 13</span>         <span class="k1">char</span> scancode <span class="k3">=</span> ev.keyboard.keycode<span class="k2">;</span>
<span class="number"> 14</span> 
<span class="number"> 15</span>         <span class="c">// a character key was pressed; add it to the string</span>
<span class="number"> 16</span>         <span class="k1">if</span><span class="k2">(</span>ASCII <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">32</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> ASCII <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">126</span><span class="k2">)</span>
<span class="number"> 17</span>         <span class="k2">{</span>  <span class="c">// add the new char, inserting or replacing as need be</span>
<span class="number"> 18</span>          
<span class="number"> 19</span>     <span class="k1">if</span><span class="k2">(</span>insert <span class="k3">|</span><span class="k3">|</span> iter <span class="k3">=</span><span class="k3">=</span> edittext.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 20</span>               iter <span class="k3">=</span> edittext.insert<span class="k2">(</span>iter, ASCII<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>            <span class="k1">else</span>
<span class="number"> 22</span>               edittext.replace<span class="k2">(</span>caret, <span class="n">1</span>, <span class="n">1</span>, ASCII<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span> 
<span class="number"> 24</span>            <span class="c">// increment both the caret and the iterator</span>
<span class="number"> 25</span>
<span class="number"> 26</span>        caret<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 27</span>            iter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>         <span class="k2">}</span>
<span class="number"> 30</span>         <span class="c">// some other, "special" key was pressed; handle it here</span>
<span class="number"> 31</span>         <span class="k1">else</span>
<span class="number"> 32</span>            <span class="k1">switch</span><span class="k2">(</span>scancode<span class="k2">)</span>
<span class="number"> 33</span>            <span class="k2">{</span>    <span class="k1">case</span> ALLEGRO_KEY_DELETE:
<span class="number"> 34</span>                  <span class="k1">if</span><span class="k2">(</span>iter <span class="k3">!</span><span class="k3">=</span> edittext.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> iter <span class="k3">=</span> edittext.erase<span class="k2">(</span>iter<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>               <span class="k1">break</span><span class="k2">;</span> 
<span class="number"> 36</span>               <span class="k1">case</span> ALLEGRO_KEY_BACKSPACE:
<span class="number"> 37</span>                  <span class="k1">if</span><span class="k2">(</span>iter <span class="k3">!</span><span class="k3">=</span> edittext.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 38</span>                  <span class="k2">{</span>  
<span class="number"> 39</span>                     caret--<span class="k2">;</span>
<span class="number"> 40</span>                     iter--<span class="k2">;</span>
<span class="number"> 41</span>                     iter <span class="k3">=</span> edittext.erase<span class="k2">(</span>iter<span class="k2">)</span><span class="k2">;</span>                  <span class="k2">}</span>
<span class="number"> 42</span>               <span class="k1">break</span><span class="k2">;</span> 
<span class="number"> 43</span>               <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 44</span>                  <span class="k1">if</span><span class="k2">(</span>iter <span class="k3">!</span><span class="k3">=</span> edittext.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>   caret<span class="k3">+</span><span class="k3">+</span>, iter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 45</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 46</span>                <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 47</span>                  <span class="k1">if</span><span class="k2">(</span>iter <span class="k3">!</span><span class="k3">=</span> edittext.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> caret--, iter--<span class="k2">;</span>
<span class="number"> 48</span>               <span class="k1">break</span><span class="k2">;</span> 
<span class="number"> 49</span>               <span class="k1">case</span> ALLEGRO_KEY_INSERT:
<span class="number"> 50</span>                  <span class="k1">if</span><span class="k2">(</span>insert<span class="k2">)</span> insert <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="k1">else</span> insert <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 51</span>               <span class="k1">break</span><span class="k2">;</span> 
<span class="number"> 52</span>               default: 
<span class="number"> 53</span>               <span class="k1">break</span><span class="k2">;</span>   <span class="k2">}</span>     <span class="k2">}</span> 
<span class="number"> 54</span>     
<span class="number"> 55</span>      
<span class="number"> 56</span>     
<span class="number"> 57</span>     <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="n">20</span>,<span class="n">20</span>,ALLEGRO_ALIGN_LEFT,edittext.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 58</span>      
<span class="number"> 59</span>     <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span>   <span class="k2">}</span> <span class="k1">while</span><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>


EDIT: Code above works quite well ! </p><p>new question:<br /> Error	1	error C2664: &#39;al_stop_sample&#39; : cannot convert parameter 1 from &#39;ALLEGRO_SAMPLE *&#39; to &#39;ALLEGRO_SAMPLE_ID *&#39;	c:\users\alexaroth\documents\visual studio 2010\projects\homeless bloodbath a5\homeless bloodbath a5\sound.cpp	<br />why ? <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alex Ioan)</author>
		<pubDate>Wed, 15 Jun 2011 23:57:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You need to send an ALLEGRO_SAMPLE_<b>ID</b>, not just an ALLEGRO_SAMPLE.</p><p>When you play a sample using </p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_play_sample"><span class="a">al_play_sample</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE"><span class="a">ALLEGRO_SAMPLE</span></a> <span class="k3">*</span>spl, <span class="k1">float</span> gain, <span class="k1">float</span> pan, <span class="k1">float</span> speed,
   <a href="http://www.allegro.cc/manual/ALLEGRO_PLAYMODE"><span class="a">ALLEGRO_PLAYMODE</span></a> loop, <a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE_ID"><span class="a">ALLEGRO_SAMPLE_ID</span></a> <span class="k3">*</span>ret_id<span class="k2">)</span>
</pre></div></div><p>

you need to set an ALLEGRO_SAMPLE_ID.</p><div class="source-code snippet"><div class="inner"><pre>
<a href="http://www.allegro.cc/manual/ALLEGRO_SAMPLE_ID"><span class="a">ALLEGRO_SAMPLE_ID</span></a> <span class="k3">*</span> id<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_play_sample"><span class="a">al_play_sample</span></a><span class="k2">(</span>spl, <span class="n">1</span>, <span class="n">0</span>, <span class="n">1</span>, <span class="n">1</span>, id<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_stop_sample"><span class="a">al_stop_sample</span></a><span class="k2">(</span>id<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Thu, 16 Jun 2011 00:18:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The reason is that you can call <span class="source-code"><a href="http://www.allegro.cc/manual/al_play_sample"><span class="a">al_play_sample</span></a><span class="k2">(</span><span class="k2">)</span></span> many times on the same sample, so the id distinguishes those.</p><p>Technically there&#39;s some misnomers with the function names, but I think they are easier to understand misnamed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Thu, 16 Jun 2011 00:33:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>another question: why can&#39;t I draw text onto a bitmap anymore ? how could I do that ? <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /> </p><p>and: how can I pass arguments ?<br />like</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, l_map_rgb<span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="n">210</span>,<span class="k3">-</span><span class="n">1</span>,ALLEGRO_ALIGN_LEFT,<span class="s">"You are now level %d"</span>,level<span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
</pre></div></div><p>
and a bonus one: is masked_blit gone ? like, the concept of it</p><p>also what does al_clear_to_color clear ? the screen ? how can I make it clear a specified bitmap ? //done</p><p>note that I have read the A5 tutorials but they don&#39;t provide any info on this </p><p>EDIT: got the set target function.. but why complicate things ? anyway
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alex Ioan)</author>
		<pubDate>Fri, 17 Jun 2011 00:43:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>See <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span><span class="k2">)</span></span>.</p><p>The alpha component with the default blender automatically gives you masked_blits. So all you need to do is load a PNG file and those pixels with alpha=0 will be skipped.</p><p>A convenience method is provided <span class="source-code"><a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span><span class="k2">)</span></span> that converts the old pink style bitmaps to an alpha-ready bitmap.</p><p>The <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span></span> affects the drawing operations.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Fri, 17 Jun 2011 01:32:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>so if I have a bmp with pink background it will automatically see the pink as transparent ?</p><p>and how exactly would I use al_convert_mask_to_alpha() ?<br />does it edit the picture file or the one loaded in the memory ?</p><p>and I still don&#39;t get key presses</p><p>I would have
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span>
<span class="k2">{</span><span class="k1">do</span> stuff<span class="k2">}</span>
</pre></div></div><p>
how is that in A5 again ? don&#39;t tell me I have to use events here too <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alex Ioan)</author>
		<pubDate>Fri, 17 Jun 2011 01:54:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code"><a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span></p><p>If bmp was an old A4 magic-pink bitmap, it is now an A5 ready alpha bitmap.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607607/921732#target">ALEXAROTH</a> said:</div><div class="quote"><p> how is that in A5 again ? don&#39;t tell me I have to use events here too </p></div></div><p>Read the manual section that talks about <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k2">)</span></span>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Fri, 17 Jun 2011 02:06:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>kbdstate<span class="k2">)</span><span class="k2">;</span> 
<span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>kbdstate, ALLEGRO_KEY_ESCAPE<span class="k2">)</span><span class="k2">)</span>
</pre></div></div><p>
got it thanks ! <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /> </p><p>Although it feels kinda complicated and seems impossible to implement as I wish without adding another loop around the original loop ...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alex Ioan)</author>
		<pubDate>Fri, 17 Jun 2011 02:09:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Allegro 5 is not as simple for quick &amp; dirty implementations. But it allows you to do more, so the complications are not for nothing. If you really want an old key style function, just do:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> is_key_pressed<span class="k2">(</span><span class="k1">int</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span>
<span class="k2">{</span>
  <a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> s<span class="k2">;</span>
  <a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>s<span class="k2">)</span><span class="k2">;</span>
  <span class="k1">return</span> <a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>s, <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>

<span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>is_key_pressed<span class="k2">(</span>ALLEGRO_KEY_ESCAPE<span class="k2">)</span><span class="k2">)</span>
<span class="k2">{</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Fri, 17 Jun 2011 02:20:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yea hopefully timers will work better in A5... I&#39;ll probably have some questions for those too <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>thanks for the help so far !</p><p>its past midnight here so might stop coding and start reading more tutorials tomorrow. </p><p>PS isn&#39;t it <br /><span class="source-code"><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>is_key_pressed<span class="k2">(</span>ALLEGRO_KEY_ESCAPE<span class="k2">)</span><span class="k2">)</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alex Ioan)</author>
		<pubDate>Fri, 17 Jun 2011 02:32:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Fixed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Fri, 17 Jun 2011 03:18:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>still can&#39;t find a work around for the menu... It&#39;s not the escape while in a fight type of menu , but more like a simple out of the game menu.</p><p>Let&#39;s say I have several options, that can be triggered by key presses like: load, options, play, shop etc.</p><p>You press let&#39;s say &quot;4&quot; to visit the shop (which is a separate function, with it&#39;s own .cpp file), then you have multiple sub-menus like buy/sell/back. buy has some other sub-menus and so on. <br />What would the basic structure of such a menu be ? It seems simple I know but I couldn&#39;t figure out a simple structure without multiple loops inside other loops and function re-calling just go back to a sub-menu ....
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alex Ioan)</author>
		<pubDate>Sun, 19 Jun 2011 01:50:52 +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/607607/921987#target">ALEXAROTH</a> said:</div><div class="quote"><p>
Let&#39;s say I have several options, that can be triggered by key presses like: load, options, play, shop etc.</p><p>You press let&#39;s say &quot;4&quot; to visit the shop (which is a separate function, with it&#39;s own .cpp file), then you have multiple sub-menus like buy/sell/back. buy has some other sub-menus and so on. 
</p></div></div><p>

The first thing I came up with is a switchboard. Use a function pointer to store the current menu that you&#39;re in, and do stuff based on the return value of the current menu. For the simplest kind of menus (selecting a state), this will work perfectly. For more complicated menus that change settings interactively it should still work as long as you can change the settings inside the menu function. You can easily separate each menu into it&#39;s own file if you like, as long as you include the function&#39;s declaration in your main source file.</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">int</span> <a href="http://www.allegro.cc/manual/readkey"><span class="a">readkey</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> eq<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>   <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</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>      <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>eq , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>      <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_CHAR<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</span>         <span class="k1">return</span> ev.keyboard.keycode<span class="k2">;</span>
<span class="number">  7</span>      <span class="k2">}</span>
<span class="number">  8</span>   <span class="k2">}</span>
<span class="number">  9</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 10</span><span class="k2">}</span>
<span class="number"> 11</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="k1">int</span> main_menu<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>   <a href="http://www.allegro.cc/manual/clear_to_color"><span class="a">clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen"><span class="a">screen</span></a> , <a href="http://www.allegro.cc/manual/makecol"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>   <span class="c">// draw buttons</span>
<span class="number"> 16</span>   <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>   <a href="http://www.allegro.cc/manual/al_flush_event_queue"><span class="a">al_flush_event_queue</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>   <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 19</span>      <span class="k1">int</span> keycode <span class="k3">=</span> <a href="http://www.allegro.cc/manual/readkey"><span class="a">readkey</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>      <span class="k1">switch</span> <span class="k2">(</span>keycode<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 21</span>         <span class="k1">case</span> ALLEGRO_KEY_1 <span class="k2">:</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 22</span>         <span class="k1">case</span> ALLEGRO_KEY_ESCAPE <span class="k2">:</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 23</span>      <span class="k2">}</span>
<span class="number"> 24</span>   <span class="k2">}</span>
<span class="number"> 25</span>   <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 26</span><span class="k2">}</span>
<span class="number"> 27</span>
<span class="number"> 28</span><span class="k1">int</span> gfx_menu<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 29</span>   <span class="c">// same as main menu except with different options</span>
<span class="number"> 30</span><span class="k2">}</span>
<span class="number"> 31</span>
<span class="number"> 32</span><span class="c">/// In main</span>
<span class="number"> 33</span>
<span class="number"> 34</span><span class="k1">bool</span> in_menu <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 35</span>
<span class="number"> 36</span><span class="k1">typedef</span> <span class="k1">int</span> <span class="k2">(</span><span class="k3">*</span>MENU_FUNC<span class="k2">)</span><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>MENU_FUNC current_menu <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 38</span>
<span class="number"> 39</span><span class="c">/// In logic loop</span>
<span class="number"> 40</span>   <span class="k1">if</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 41</span>      in_menu <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 42</span>      current_menu <span class="k3">=</span> main_menu<span class="k2">;</span>
<span class="number"> 43</span>   <span class="k2">}</span>
<span class="number"> 44</span><span class="c">///...</span>
<span class="number"> 45</span>   <span class="k1">while</span> <span class="k2">(</span>in_menu<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 46</span>      <span class="k1">int</span> retval <span class="k3">=</span> current_menu<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="c">// call active menu function</span>
<span class="number"> 47</span>      <span class="k1">if</span> <span class="k2">(</span>current_menu <span class="k3">=</span><span class="k3">=</span> main_menu<span class="k2">)</span> <span class="k2">{</span><span class="c">// In main menu</span>
<span class="number"> 48</span>         <span class="k1">switch</span> <span class="k2">(</span><span class="k1">return</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 49</span>            <span class="k1">case</span> <span class="n">0</span> <span class="k2">:</span> in_menu <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k1">break</span><span class="k2">;</span><span class="c">// user cancelled menu</span>
<span class="number"> 50</span>            <span class="k1">case</span> <span class="n">1</span> <span class="k2">:</span> current_menu <span class="k3">=</span> gfx_menu<span class="k2">;</span><span class="k1">break</span><span class="k2">;</span>
<span class="number"> 51</span>         <span class="k2">}</span>
<span class="number"> 52</span>      <span class="k2">}</span>
<span class="number"> 53</span>      <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>current_menu <span class="k3">=</span><span class="k3">=</span> gfx_menu<span class="k2">)</span> <span class="k2">{</span><span class="c">// In graphics menu</span>
<span class="number"> 54</span>         <span class="k1">switch</span> <span class="k2">(</span><span class="k1">return</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 55</span>            <span class="k1">case</span> <span class="n">0</span> <span class="k2">:</span> current_menu <span class="k3">=</span> main_menu<span class="k2">;</span><span class="k1">break</span><span class="k2">;</span><span class="c">// user escaped out of gfx menu</span>
<span class="number"> 56</span>         <span class="k2">}</span>
<span class="number"> 57</span>      <span class="k2">}</span>
<span class="number"> 58</span>   <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 19 Jun 2011 03:00:07 +0000</pubDate>
	</item>
</rss>
