<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>I have some questions about mouse routines</title>
		<link>http://www.allegro.cc/forums/view/615877</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 17 Nov 2015 06:16:16 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi im new at programming at allegro 5.</p><p>I´m making a menu for a game.</p><p>My question is when I run the program it does not detect the mouse position, I dont know what I´m doing wrong.</p><p>What I want to do is to evaluate if the mouse is in a certain position it will draw a rounded rectangle.</p><p>Here is my code</p><p>#include &lt;stdio.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include&lt;allegro5/allegro.h&gt;<br />#include &quot;allegro5/allegro_image.h&quot;<br />#include &lt;allegro5\allegro_primitives.h&gt;</p><p>enum GAME_KEYS<br />{<br />    KEY_ESCAPE<br />};</p><p>int main()<br />{<br />    ALLEGRO_DISPLAY *ventana=NULL;                   //crea el display con la ventana<br />    ALLEGRO_EVENT_QUEUE *event_queue = NULL;<br />    ALLEGRO_EVENT_QUEUE *event_mouse = NULL;<br />    al_init();                                  //Se declara para señalar que empieza allegro<br />    al_install_keyboard();<br />    al_init_primitives_addon();<br />    al_install_mouse();                           //installa el mouse<br />    ventana = al_create_display(640,480);       //crea un display de 640x480<br />    al_clear_to_color(al_map_rgb(0,0,0));       //pone la pantalla en negro<br />    al_flip_display();                          //intercambia el buffer<br />    al_rest(2);<br />    ALLEGRO_BITMAP *pantalla_principal;<br />    al_init_image_addon();<br />    event_queue = al_create_event_queue();<br />    al_register_event_source(event_queue, al_get_keyboard_event_source());<br />    pantalla_principal=al_load_bitmap(&quot;Menu_principal.jpg&quot;);<br />    al_draw_bitmap(pantalla_principal,0,0,0);<br />    al_flip_display();<br />    al_rest(2);                                 //tiempo que se espera para realizar la siguiente operacion<br />    int key[1]={0};<br />    int mouse_x,mouse_y;<br />    int width = 640;<br />	int height = 480;<br />	mouse_x=width/2;<br />	mouse_y=height/2;<br />	event_mouse=al_create_event_queue();<br />	al_register_event_source(event_mouse, al_get_mouse_event_source());<br />	al_register_event_source(event_mouse, al_get_display_event_source(ventana));<br />	printf(&quot;mouse_x: %d&quot;,mouse_x);<br />    printf(&quot;\nmouse_y: %d&quot;,mouse_y);<br />    do<br />    {<br />        ALLEGRO_EVENT ev;<br />        al_wait_for_event(event_queue, &amp;ev);<br />        if(ev.type == ALLEGRO_EVENT_KEY_UP)<br />        {<br />            ALLEGRO_EVENT ev_mouse;<br />            al_wait_for_event(event_mouse, &amp;ev_mouse);<br />            if(ev_mouse.type == ALLEGRO_EVENT_MOUSE_AXES)<br />            {<br />                mouse_x = ev_mouse.mouse.x;<br />                mouse_y = ev_mouse.mouse.y;<br />                if(((mouse_x&gt;0)&amp;&amp;(mouse_x&lt;100))&amp;&amp;((mouse_y&gt;0)&amp;&amp;(mouse_y&lt;200)))<br />                {<br />                    al_draw_rounded_rectangle(0,0,100,200,1,1,al_map_rgb(255, 0,0),1);<br />                    al_flip_display();<br />                    al_clear_to_color(al_map_rgb(0,0,0));<br />                }<br />            }<br />        }<br />        else<br />            if(ev.type == ALLEGRO_EVENT_KEY_DOWN)<br />            {<br />                key[KEY_ESCAPE]=1;<br />            }</p><p>    } while(!key[KEY_ESCAPE]);<br />    al_destroy_event_queue(event_queue);<br />    al_destroy_event_queue(event_mouse);<br />    al_destroy_display(ventana);<br />    al_destroy_bitmap(pantalla_principal);<br />    return 0;<br />}
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (alexis escalona)</author>
		<pubDate>Sun, 15 Nov 2015 02:45:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your event handling is a bit muddled, and I think a whole bunch of confusion is happening because you&#39;re mixing drawing and logic and event handling. It is best to separate all 3. I suggest looking at this tutorial <a href="https://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Input">https://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Input</a> . The general idea is that you have a loop, and during each iteration you only process a single event (so you&#39;ll have only a single <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> call). In your case, you could have a loop like this (see the tutorial for the rest of the code):</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">bool</span> draw_rectangle <span class="k3">=</span> <span class="k1">false</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>event_queue, <span class="k3">&amp;</span>ev<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>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  7</span>      <span class="k1">int</span> <a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">=</span> ev.mouse.x<span class="k2">;</span>
<span class="number">  8</span>      <span class="k1">int</span> <a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">=</span> ev.mouse.y<span class="k2">;</span>
<span class="number">  9</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">&gt;</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/mouse_x"><span class="a">mouse_x</span></a> <span class="k3">&lt;</span> <span class="n">100</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">&gt;</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/mouse_y"><span class="a">mouse_y</span></a> <span class="k3">&lt;</span> <span class="n">200</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>        draw_rectangle <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 11</span>      <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 12</span>        draw_rectangle <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 13</span>      <span class="k2">}</span>
<span class="number"> 14</span>      redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 15</span>    <span class="k2">}</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    <span class="k1">if</span> <span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</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>event_queue<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 18</span>      redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><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">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"> 21</span>
<span class="number"> 22</span>      <span class="k1">if</span> <span class="k2">(</span>draw_rectangle<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 23</span>        <a href="http://www.allegro.cc/manual/al_draw_rounded_rectangle"><span class="a">al_draw_rounded_rectangle</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">100</span>, <span class="n">200</span>, <span class="n">1</span>, <span class="n">1</span>, <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">0</span><span class="k2">)</span>,
<span class="number"> 24</span>                                  <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>      <span class="k2">}</span>
<span class="number"> 26</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"> 27</span>    <span class="k2">}</span>
<span class="number"> 28</span>  <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sun, 15 Nov 2015 10:04:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You should wrap your code in &lt;code&gt; tags for better reading (click on Formatting Help while replying to get help). It seems that you&#39;re only reading a mouse event whenever you get a key up event; that will most likely return you only one of several events already in the mouse queue.</p><p>As suggested, try reading the tutorials. Using events migh seem a bit hard at first but it&#39;s totally worth it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kenmasters1976)</author>
		<pubDate>Tue, 17 Nov 2015 06:16:16 +0000</pubDate>
	</item>
</rss>
