<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[A5] Allegro Key Repeating</title>
		<link>http://www.allegro.cc/forums/view/606547</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 27 Feb 2011 14:58:12 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m reprogramming some A4 code and after entering in keyboard code, successfully compiling it, it only detects when I press an arrow key once, but doesn&#39;t do anything if I hold it down.  </p><p>Here&#39;s a code snippit:</p><div class="source-code snippet"><div class="inner"><pre>      <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>event<span class="k2">)</span><span class="k2">;</span>

      <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <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>keys<span class="k2">)</span><span class="k2">;</span>
         <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span>
            done <span class="k3">=</span> TRUE<span class="k2">;</span>
         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_UP <span class="k3">&amp;</span><span class="k3">&amp;</span> pacman.y <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> pacman.y--<span class="k2">;</span>
         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_DOWN <span class="k3">&amp;</span><span class="k3">&amp;</span> pacman.y <span class="k3">&lt;</span> <span class="k2">(</span>h-al_get_bitmap_height<span class="k2">(</span>pacman.img<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> pacman.y<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_LEFT <span class="k3">&amp;</span><span class="k3">&amp;</span> pacman.x <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> pacman.x--<span class="k2">;</span>
         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_RIGHT <span class="k3">&amp;</span><span class="k3">&amp;</span> pacman.x <span class="k3">&lt;</span> <span class="k2">(</span>w-al_get_bitmap_width<span class="k2">(</span>pacman.img<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> pacman.x<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_PRINTSCREEN<span class="k2">)</span> saveScreenshot<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
      <span class="k2">}</span>
</pre></div></div><p>

(using a pacman character in this example, not reprogramming my game though <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />)</p><p>Anyhow, I need to tap any arrow keys like mad to get it to move at all.  I seen some code that had:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN <span class="k3">|</span><span class="k3">|</span> event.type <span class="k3">=</span> ALLEGRO_EVENT_KEY_REPEAT<span class="k2">)</span>
</pre></div></div><p>

but when I tried it I got an error about ALLEGRO_EVENT_KEY_REPEAT being undefined.  Was this dropped from Allegro 5, or is there something I am missing?  Not 100% certain on how to approach this.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sun, 27 Feb 2011 11:54:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think you should use ALLEGRO_EVENT_KEY_CHAR and then check event.keyboard.keycode.<br />The ALLEGRO_EVENT_KEY_CHAR has a keyboard.repeat field, where the ALLEGRO_EVENT_KEY_DOWN field does not and I don&#39;t believe you&#39;ll get ALLEGRO_EVENT_KEY_DOWN for repeated keys.</p><p>Edit -
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606547/905493#target">Neil Roy</a> said:</div><div class="quote"><p>
Anyhow, I need to tap any arrow keys like mad to get it to move at all.
</p></div></div><p>
Well, you&#39;re only moving it one pixel at a time for each key press, what did you expect? Don&#39;t you want to just set the direction it is moving for each key press?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 27 Feb 2011 11:58:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You have to use ALLEGRO_EVENT_KEY_CHAR if you want to get repeats.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Sun, 27 Feb 2011 12:01:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>KEY_DOWN and KEY_UP represent a physical key being pressed or released. KEY_CHAR indicates some character has been pressed or repeated.</p><p>Note that there is not a 1:1 map between KEY_DOWN and KEY_CHAR. Some characters may take multiple KEY_DOWN events to get triggered. Or one KEY_DOWN could trigger multiple KEY_CHARs (repeats, macros, etc...).</p><p>Solution #1: use KEY_CHAR</p><p>Solution #2: set a flag when receiving KEY_DOWN and clear it when receiving KEY_UP</p><p>Relying on repeating keys isn&#39;t generally good practice though. So I&#39;d use #2 if you use events.</p><p>Solution #3: use the keyboard state functions instead of keyboard events. This is how Allegro 4 worked.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sun, 27 Feb 2011 12:05:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Assuming you have a timer installed:</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="c">// Main game loop</span>
<span class="number">  2</span><span class="k1">do</span>
<span class="number">  3</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>
<span class="number">  6</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">  7</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>keys<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</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_TIMER<span class="k2">)</span>
<span class="number"> 10</span>  <span class="k2">{</span>
<span class="number"> 11</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>keys, ALLEGRO_KEY_UP<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> pacman.y <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> pacman.y--<span class="k2">;</span>
<span class="number"> 12</span>    ...
<span class="number"> 13</span>  <span class="k2">}</span>
<span class="number"> 14</span>
<span class="number"> 15</span>  ...
<span class="number"> 16</span><span class="k2">}</span>
</div></div><p>

There&#39;s a tutorial on the wiki (<a href="http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Timers">Here</a>) that shows how to install a timer and handle game-logic + drawing.</p><p>EDIT: Fixed code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Sun, 27 Feb 2011 12:23:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Small correction to BillyBob&#39;s code - <span class="source-code"><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a></span> takes two arguments - an <span class="source-code">ALLEGRO_KEY_STATE<span class="k3">*</span></span> and an int keycode. Which means you need to also declare an ALLEGRO_KEY_STATE object and 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> on it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 27 Feb 2011 12:36:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Actually I wrote this quickly for a test program I have (pixel perfect collision) and I just needed to move the character (pacman in this test) around until it collides in various ways to see if the codes works.</p><p>I just tried setting a flag, and it works, but it seems awful slow at times (I sped up the movement by +2 instead).  Especially when drawing rectangles.  I draw a rectangle around three bitmaps I am drawing to show the bounding box for collisions and when  there is a collision I change the colour of the bounding box from green to red, that really seems to cause a bit of a spike in lag for a moment.</p><p>I&#39;m thinking that I may have to ditch the idea of using events altogether or do something differently.  This is a pretty simple program.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sun, 27 Feb 2011 13:20:01 +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/606547/905507#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>Small correction to BillyBob&#39;s</p></div></div><p>
Thank you, I don&#39;t know what I was thinking <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> Code corrected.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606547/905513#target">Neil Roy</a> said:</div><div class="quote"><p>but it seems awful slow at times</p></div></div><p>
Is your code timed, like my example?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Sun, 27 Feb 2011 13:23:47 +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/606547/905513#target">Neil Roy</a> said:</div><div class="quote"><p>
I just tried setting a flag, and it works, but it seems awful slow at times (I sped up the movement by +2 instead).  Especially when drawing rectangles.  I draw a rectangle around three bitmaps I am drawing to show the bounding box for collisions and when  there is a collision I change the colour of the bounding box from green to red, that really seems to cause a bit of a spike in lag for a moment.
</p></div></div><p>
How often do you draw, and what rate is your timer set at? A simple program like that should be ridiculously fast. Show more code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 27 Feb 2011 13:25:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I haven&#39;t tried your new code yet.  This works, but lags when you collide a little.  Probably my collision code is a little slow, but I couldn&#39;t imagine it being THIS slow, it was faster before.  I am reading and comparing pixels from the colliding bitmaps, so I am wondering if there is something extra I need to do before reading pixels etc... </p><p>main.c<br />~~~~~~
</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="p">#define WIDTH    800</span>
<span class="number">   2</span><span class="p">#define HEIGHT   600</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">   7</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   8</span>
<span class="number">   9</span><span class="p">#include "sprite.h"</span>
<span class="number">  10</span><span class="p">#include "sprite_collide.h"</span>
<span class="number">  11</span><span class="p">#include "al_error.h"</span>
<span class="number">  12</span>
<span class="number">  13</span>
<span class="number">  14</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span>argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  15</span><span class="k2">{</span>
<span class="number">  16</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  17</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer<span class="k2">;</span>
<span class="number">  18</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>queue<span class="k2">;</span>
<span class="number">  19</span>   <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  20</span>   <span class="k1">bool</span> pressed_key<span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number">  21</span>   sprite pacman, dot<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  22</span>   <span class="k1">bool</span> done <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  23</span>
<span class="number">  24</span>   <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span>   <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span>   <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  27</span>   <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  28</span>
<span class="number">  29</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span>pressed_key, <span class="k1">false</span>, <span class="k1">sizeof</span><span class="k2">(</span>pressed_key<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>
<span class="number">  31</span>   display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number">  32</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  33</span>      al_error<span class="k2">(</span>AT, display, <span class="s">"al_create_display() failed!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  35</span>   <span class="k2">}</span>
<span class="number">  36</span>
<span class="number">  37</span>   pacman.img <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"pacman.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>pacman.img<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  39</span>      al_error<span class="k2">(</span>AT, display, <span class="s">"load pacman.png failed!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  40</span>      done <span class="k3">=</span> TRUE<span class="k2">;</span>
<span class="number">  41</span>   <span class="k2">}</span>
<span class="number">  42</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  43</span>      pacman.x <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>   <span class="c">// this should be always be set according to a map</span>
<span class="number">  44</span>      pacman.y <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>   <span class="c">// this should be always be set according to a map</span>
<span class="number">  45</span>      pacman.collision <span class="k3">=</span> FALSE<span class="k2">;</span>
<span class="number">  46</span>   <span class="k2">}</span>
<span class="number">  47</span>
<span class="number">  48</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><span class="k3">=</span><span class="n">1</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  49</span>      dot<span class="k2">[</span>i<span class="k2">]</span>.img <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"dot.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>      <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>dot<span class="k2">[</span>i<span class="k2">]</span>.img<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  51</span>         al_error<span class="k2">(</span>AT, display, <span class="s">"load dot.png failed!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>         done <span class="k3">=</span> TRUE<span class="k2">;</span>
<span class="number">  53</span>      <span class="k2">}</span>
<span class="number">  54</span>      <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  55</span>         dot<span class="k2">[</span>i<span class="k2">]</span>.x <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span> <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>dot<span class="k2">[</span>i<span class="k2">]</span>.img<span class="k2">)</span><span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span> <span class="k3">+</span> <span class="n">50</span><span class="k3">*</span>i<span class="k2">;</span>
<span class="number">  56</span>         dot<span class="k2">[</span>i<span class="k2">]</span>.y <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span> <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>dot<span class="k2">[</span>i<span class="k2">]</span>.img<span class="k2">)</span><span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>         dot<span class="k2">[</span>i<span class="k2">]</span>.collision <span class="k3">=</span> FALSE<span class="k2">;</span>
<span class="number">  58</span>      <span class="k2">}</span>
<span class="number">  59</span>   <span class="k2">}</span>
<span class="number">  60</span>
<span class="number">  61</span>   timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  62</span>   queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span>   <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>   <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>
<span class="number">  68</span>   <span class="k1">float</span> h <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  69</span>   <span class="k1">float</span> w <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>
<span class="number">  71</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> keys<span class="k2">;</span>
<span class="number">  72</span>   <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  73</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number">  74</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>event<span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span>
<span class="number">  76</span>      <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span>
<span class="number">  77</span>         done <span class="k3">=</span> TRUE<span class="k2">;</span>
<span class="number">  78</span>
<span class="number">  79</span>      <span class="c">// check for key input and process it</span>
<span class="number">  80</span>      <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  81</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>keys<span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>         <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span>
<span class="number">  83</span>            done <span class="k3">=</span> TRUE<span class="k2">;</span>
<span class="number">  84</span>         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_UP<span class="k2">)</span> pressed_key<span class="k2">[</span>ALLEGRO_KEY_UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  85</span>         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_DOWN<span class="k2">)</span> pressed_key<span class="k2">[</span>ALLEGRO_KEY_DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  86</span>         <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_LEFT<span class="k2">)</span> pressed_key<span class="k2">[</span>ALLEGRO_KEY_LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  87</span>         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_RIGHT<span class="k2">)</span> pressed_key<span class="k2">[</span>ALLEGRO_KEY_RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  88</span>      <span class="k2">}</span>
<span class="number">  89</span>      <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  90</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>keys<span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>         <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_UP<span class="k2">)</span> pressed_key<span class="k2">[</span>ALLEGRO_KEY_UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  92</span>         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_DOWN<span class="k2">)</span> pressed_key<span class="k2">[</span>ALLEGRO_KEY_DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  93</span>         <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_LEFT<span class="k2">)</span> pressed_key<span class="k2">[</span>ALLEGRO_KEY_LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  94</span>         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_RIGHT<span class="k2">)</span> pressed_key<span class="k2">[</span>ALLEGRO_KEY_RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  95</span>      <span class="k2">}</span>
<span class="number">  96</span>
<span class="number">  97</span>      <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  98</span>         <span class="k1">if</span><span class="k2">(</span>pressed_key<span class="k2">[</span>ALLEGRO_KEY_UP<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> pacman.y <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> pacman.y-<span class="k3">=</span><span class="n">2</span><span class="k2">;</span>
<span class="number">  99</span>         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>pressed_key<span class="k2">[</span>ALLEGRO_KEY_DOWN<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> pacman.y <span class="k3">&lt;</span> <span class="k2">(</span>h-al_get_bitmap_height<span class="k2">(</span>pacman.img<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> pacman.y<span class="k3">+</span><span class="k3">=</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 100</span>         <span class="k1">if</span><span class="k2">(</span>pressed_key<span class="k2">[</span>ALLEGRO_KEY_LEFT<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> pacman.x <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> pacman.x-<span class="k3">=</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 101</span>         <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>pressed_key<span class="k2">[</span>ALLEGRO_KEY_RIGHT<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> pacman.x <span class="k3">&lt;</span> <span class="k2">(</span>w-al_get_bitmap_width<span class="k2">(</span>pacman.img<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> pacman.x<span class="k3">+</span><span class="k3">=</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 102</span>
<span class="number"> 103</span>         pacman.collision <span class="k3">=</span> FALSE<span class="k2">;</span>
<span class="number"> 104</span>         dot<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.collision <span class="k3">=</span> FALSE<span class="k2">;</span>
<span class="number"> 105</span>         dot<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.collision <span class="k3">=</span> FALSE<span class="k2">;</span>
<span class="number"> 106</span>
<span class="number"> 107</span>         <span class="c">// set collision flag on objects that were involved in a collision</span>
<span class="number"> 108</span>         <span class="k1">if</span><span class="k2">(</span>sprite_collide<span class="k2">(</span><span class="k3">&amp;</span>dot<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, <span class="k3">&amp;</span>pacman<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 109</span>            dot<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.collision <span class="k3">=</span> TRUE<span class="k2">;</span>
<span class="number"> 110</span>            pacman.collision <span class="k3">=</span> TRUE<span class="k2">;</span>
<span class="number"> 111</span>         <span class="k2">}</span>
<span class="number"> 112</span>         <span class="k1">if</span><span class="k2">(</span>sprite_collide<span class="k2">(</span><span class="k3">&amp;</span>dot<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, <span class="k3">&amp;</span>pacman<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 113</span>            dot<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.collision <span class="k3">=</span> TRUE<span class="k2">;</span>
<span class="number"> 114</span>            pacman.collision <span class="k3">=</span> TRUE<span class="k2">;</span>
<span class="number"> 115</span>         <span class="k2">}</span>
<span class="number"> 116</span>         redraw <span class="k3">=</span> TRUE<span class="k2">;</span>
<span class="number"> 117</span>      <span class="k2">}</span>
<span class="number"> 118</span>
<span class="number"> 119</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>queue<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 120</span>         redraw <span class="k3">=</span> FALSE<span class="k2">;</span>
<span class="number"> 121</span>
<span class="number"> 122</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"> 123</span>
<span class="number"> 124</span>         <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>dot<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.img, dot<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x, dot<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>         <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>dot<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.img, dot<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.x, dot<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>         <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>pacman.img, pacman.x, pacman.y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</span>
<span class="number"> 128</span>         <span class="c">// draw a rectangle around our objects, color them red if that object is colliding</span>
<span class="number"> 129</span>         <span class="k1">if</span><span class="k2">(</span>pacman.collision<span class="k2">)</span>
<span class="number"> 130</span>            <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span>pacman.x, pacman.y, pacman.x<span class="k3">+</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>pacman.img<span class="k2">)</span>, pacman.y<span class="k3">+</span><a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>pacman.img<span class="k2">)</span>,
<span class="number"> 131</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="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 132</span>         <span class="k1">else</span>
<span class="number"> 133</span>            <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span>pacman.x, pacman.y, pacman.x<span class="k3">+</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>pacman.img<span class="k2">)</span>, pacman.y<span class="k3">+</span><a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>pacman.img<span class="k2">)</span>,
<span class="number"> 134</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">255</span>,<span class="n">0</span><span class="k2">)</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>
<span class="number"> 136</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><span class="k3">=</span><span class="n">1</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 137</span>            <span class="k1">if</span><span class="k2">(</span>dot<span class="k2">[</span>i<span class="k2">]</span>.collision<span class="k2">)</span>
<span class="number"> 138</span>               <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span>dot<span class="k2">[</span>i<span class="k2">]</span>.x, dot<span class="k2">[</span>i<span class="k2">]</span>.y, dot<span class="k2">[</span>i<span class="k2">]</span>.x<span class="k3">+</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>dot<span class="k2">[</span>i<span class="k2">]</span>.img<span class="k2">)</span>, dot<span class="k2">[</span>i<span class="k2">]</span>.y<span class="k3">+</span><a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>dot<span class="k2">[</span>i<span class="k2">]</span>.img<span class="k2">)</span>,
<span class="number"> 139</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="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>            <span class="k1">else</span>
<span class="number"> 141</span>               <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span>dot<span class="k2">[</span>i<span class="k2">]</span>.x, dot<span class="k2">[</span>i<span class="k2">]</span>.y, dot<span class="k2">[</span>i<span class="k2">]</span>.x<span class="k3">+</span><a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>dot<span class="k2">[</span>i<span class="k2">]</span>.img<span class="k2">)</span>, dot<span class="k2">[</span>i<span class="k2">]</span>.y<span class="k3">+</span><a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>dot<span class="k2">[</span>i<span class="k2">]</span>.img<span class="k2">)</span>,
<span class="number"> 142</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">255</span>,<span class="n">0</span><span class="k2">)</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span>         <span class="k2">}</span>
<span class="number"> 144</span>
<span class="number"> 145</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"> 146</span>      <span class="k2">}</span>
<span class="number"> 147</span>   <span class="k2">}</span>
<span class="number"> 148</span>
<span class="number"> 149</span>   <span class="c">// clean up and exit</span>
<span class="number"> 150</span>   <span class="k1">if</span><span class="k2">(</span>pacman.img <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>pacman.img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 151</span>   <span class="k1">if</span><span class="k2">(</span>dot<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.img <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>dot<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 152</span>   <span class="k1">if</span><span class="k2">(</span>dot<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.img <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span> <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>dot<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 153</span>   <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 154</span>
<span class="number"> 155</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 156</span><span class="k2">}</span>
</div></div><p>


sprite_collide.c<br />~~~~~~~~~~~~~~~~
</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="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;allegro5/allegro_color.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="p">#include "sprite.h"</span>
<span class="number">  6</span><span class="p">#include "sprite_collide.h"</span>
<span class="number">  7</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="c">// Pixel Perfect collision detector</span>
<span class="number"> 10</span><span class="k1">int</span> sprite_collide<span class="k2">(</span>sprite <span class="k3">*</span>object1, sprite <span class="k3">*</span>object2<span class="k2">)</span>
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>   <span class="k1">int</span> left1, left2, over_left<span class="k2">;</span>
<span class="number"> 13</span>   <span class="k1">int</span> right1, right2, over_right<span class="k2">;</span>
<span class="number"> 14</span>   <span class="k1">int</span> top1, top2, over_top<span class="k2">;</span>
<span class="number"> 15</span>   <span class="k1">int</span> bottom1, bottom2, over_bottom<span class="k2">;</span>
<span class="number"> 16</span>   <span class="k1">int</span> over_width, over_height<span class="k2">;</span>
<span class="number"> 17</span>   <span class="k1">int</span> cx, cy<span class="k2">;</span>
<span class="number"> 18</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> colour<span class="k2">;</span> <span class="c">// Hey, I'm canadian, it's COLOUR here! ;)</span>
<span class="number"> 19</span>   <a href="http://www.allegro.cc/manual/RGB"><span class="a">RGB</span></a> pixel1, pixel2<span class="k2">;</span>
<span class="number"> 20</span>   <span class="k1">int</span> sum1, sum2<span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>   left1 <span class="k3">=</span> object1-&gt;x<span class="k2">;</span>
<span class="number"> 23</span>   left2 <span class="k3">=</span> object2-&gt;x<span class="k2">;</span>
<span class="number"> 24</span>   right1 <span class="k3">=</span> object1-&gt;x <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>object1-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>   right2 <span class="k3">=</span> object2-&gt;x <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>object2-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>   top1 <span class="k3">=</span> object1-&gt;y<span class="k2">;</span>
<span class="number"> 27</span>   top2 <span class="k3">=</span> object2-&gt;y<span class="k2">;</span>
<span class="number"> 28</span>   bottom1 <span class="k3">=</span> object1-&gt;y <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>object1-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>   bottom2 <span class="k3">=</span> object2-&gt;y <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>object2-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span>
<span class="number"> 32</span>   <span class="c">// First we'll test if the bounding boxes overlap.</span>
<span class="number"> 33</span>   <span class="c">// If they don't overlap at all, there's no sense in checking further.</span>
<span class="number"> 34</span>   <span class="k1">if</span><span class="k2">(</span>bottom1 <span class="k3">&lt;</span> top2<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>   <span class="k1">if</span><span class="k2">(</span>top1 <span class="k3">&gt;</span> bottom2<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>
<span class="number"> 37</span>   <span class="k1">if</span><span class="k2">(</span>right1 <span class="k3">&lt;</span> left2<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>   <span class="k1">if</span><span class="k2">(</span>left1 <span class="k3">&gt;</span> right2<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>
<span class="number"> 40</span>
<span class="number"> 41</span>   <span class="c">// The bounding boxes overlap, so there's a potential collision.</span>
<span class="number"> 42</span>   <span class="c">// We'll store the location of the actual overlap</span>
<span class="number"> 43</span>   <span class="k1">if</span><span class="k2">(</span>bottom1 <span class="k3">&gt;</span> bottom2<span class="k2">)</span> over_bottom <span class="k3">=</span> bottom2<span class="k2">;</span>
<span class="number"> 44</span>   <span class="k1">else</span> over_bottom <span class="k3">=</span> bottom1<span class="k2">;</span>
<span class="number"> 45</span>
<span class="number"> 46</span>   <span class="k1">if</span><span class="k2">(</span>top1 <span class="k3">&lt;</span> top2<span class="k2">)</span> over_top <span class="k3">=</span> top2<span class="k2">;</span>
<span class="number"> 47</span>   <span class="k1">else</span> over_top <span class="k3">=</span> top1<span class="k2">;</span>
<span class="number"> 48</span>
<span class="number"> 49</span>   <span class="k1">if</span><span class="k2">(</span>right1 <span class="k3">&gt;</span> right2<span class="k2">)</span> over_right <span class="k3">=</span> right2<span class="k2">;</span>
<span class="number"> 50</span>   <span class="k1">else</span> over_right <span class="k3">=</span> right1<span class="k2">;</span>
<span class="number"> 51</span>
<span class="number"> 52</span>   <span class="k1">if</span><span class="k2">(</span>left1 <span class="k3">&lt;</span> left2<span class="k2">)</span> over_left <span class="k3">=</span> left2<span class="k2">;</span>
<span class="number"> 53</span>   <span class="k1">else</span> over_left <span class="k3">=</span> left1<span class="k2">;</span>
<span class="number"> 54</span>
<span class="number"> 55</span>   over_height <span class="k3">=</span> over_bottom <span class="k3">-</span> over_top<span class="k2">;</span>
<span class="number"> 56</span>   over_width <span class="k3">=</span> over_right <span class="k3">-</span> over_left<span class="k2">;</span>
<span class="number"> 57</span>
<span class="number"> 58</span>   <span class="c">// Okay, we found where the overlap occured and we'll now only check within that area for any</span>
<span class="number"> 59</span>   <span class="c">// collisions.</span>
<span class="number"> 60</span>   <span class="k1">for</span><span class="k2">(</span>cy<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> cy <span class="k3">&lt;</span> over_height<span class="k2">;</span> cy<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 61</span>   <span class="k2">{</span>
<span class="number"> 62</span>      <span class="k1">for</span><span class="k2">(</span>cx<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> cx <span class="k3">&lt;</span> over_width<span class="k2">;</span> cx<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 63</span>      <span class="k2">{</span>
<span class="number"> 64</span>         <span class="c">// sample a pixel from each object</span>
<span class="number"> 65</span>         colour <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>object1-&gt;img, <span class="k2">(</span>over_left-object1-&gt;x<span class="k2">)</span><span class="k3">+</span>cx, <span class="k2">(</span>over_top-object1-&gt;y<span class="k2">)</span><span class="k3">+</span>cy<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 66</span>         <a href="http://www.allegro.cc/manual/al_unmap_rgb"><span class="a">al_unmap_rgb</span></a><span class="k2">(</span>colour, <span class="k3">&amp;</span>pixel1.r, <span class="k3">&amp;</span>pixel1.g, <span class="k3">&amp;</span>pixel1.b<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 67</span>         sum1 <span class="k3">=</span> pixel1.r<span class="k3">+</span>pixel1.g<span class="k3">+</span>pixel1.b<span class="k2">;</span>
<span class="number"> 68</span>
<span class="number"> 69</span>         colour <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>object2-&gt;img, <span class="k2">(</span>over_left-object2-&gt;x<span class="k2">)</span><span class="k3">+</span>cx, <span class="k2">(</span>over_top-object2-&gt;y<span class="k2">)</span><span class="k3">+</span>cy<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 70</span>         <a href="http://www.allegro.cc/manual/al_unmap_rgb"><span class="a">al_unmap_rgb</span></a><span class="k2">(</span>colour, <span class="k3">&amp;</span>pixel2.r, <span class="k3">&amp;</span>pixel2.g, <span class="k3">&amp;</span>pixel2.b<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 71</span>         sum2 <span class="k3">=</span> pixel2.r<span class="k3">+</span>pixel2.g<span class="k3">+</span>pixel2.b<span class="k2">;</span>
<span class="number"> 72</span>
<span class="number"> 73</span>         <span class="c">// We need to check if the pixel color DOESN'T equal zero, not just greater than zero because</span>
<span class="number"> 74</span>         <span class="c">// with 32bit color you're going to get negative values in the color information due to the</span>
<span class="number"> 75</span>         <span class="c">// large size of the number that represents the three colors.</span>
<span class="number"> 76</span>         <span class="c">// If neither of the two pixels are transparent (black = RGB =0) than we have a collision,</span>
<span class="number"> 77</span>         <span class="c">// flag it and exit.</span>
<span class="number"> 78</span>         <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>sum1 <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>sum2 <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>TRUE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 79</span>      <span class="k2">}</span>
<span class="number"> 80</span>   <span class="k2">}</span>
<span class="number"> 81</span>
<span class="number"> 82</span>   <span class="c">// couldn't find any collision in the overlap</span>
<span class="number"> 83</span>   <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 84</span><span class="k2">}</span>
</div></div><p>


sprite.h<br />~~~~~~~~
</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="p">#ifndef sprite_h</span>
<span class="number">  2</span><span class="p">#define sprite_h</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">typedef</span> <span class="k1">struct</span> sprite
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>img<span class="k2">;</span>
<span class="number">  9</span>    <span class="k1">int</span> x<span class="k2">;</span>
<span class="number"> 10</span>    <span class="k1">int</span> y<span class="k2">;</span>
<span class="number"> 11</span>    <span class="k1">short</span> <span class="k1">int</span> collision<span class="k2">;</span>
<span class="number"> 12</span>    <span class="k1">int</span> col_x<span class="k2">;</span>
<span class="number"> 13</span>    <span class="k1">int</span> col_y<span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">int</span> col_w<span class="k2">;</span>
<span class="number"> 15</span>    <span class="k1">int</span> col_h<span class="k2">;</span>
<span class="number"> 16</span><span class="k2">}</span> sprite<span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span><span class="p">#endif</span>
</div></div><p>


sprite_collide.h<br />~~~~~~~~~~~~~~~~
</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#ifndef sprite_collide_h</span>
<span class="p">#define sprite_collide_h</span>

<span class="k1">typedef</span> <span class="k1">struct</span> <a href="http://www.allegro.cc/manual/RGB"><span class="a">RGB</span></a> <span class="k2">{</span>
   <span class="k1">unsigned</span> <span class="k1">char</span> r<span class="k2">;</span>
   <span class="k1">unsigned</span> <span class="k1">char</span> g<span class="k2">;</span>
   <span class="k1">unsigned</span> <span class="k1">char</span> b<span class="k2">;</span>
<span class="k2">}</span> <a href="http://www.allegro.cc/manual/RGB"><span class="a">RGB</span></a><span class="k2">;</span>

<span class="k1">int</span> sprite_collide<span class="k2">(</span>sprite <span class="k3">*</span>object1, sprite <span class="k3">*</span>object2<span class="k2">)</span><span class="k2">;</span>

<span class="p">#endif</span>
</pre></div></div><p>

al_error.c<br />~~~~~~~~~~
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// Allegro 5 error message</span>

<span class="p">#include &lt;stdio.h&gt;</span>
<span class="p">#include &lt;allegro5/allegro_native_dialog.h&gt;</span>
<span class="p">#include "al_error.h"</span>

<span class="k1">void</span> al_error<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>func, <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a>, <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>message<span class="k2">)</span>
<span class="k2">{</span>
   <span class="k1">char</span> text<span class="k2">[</span><span class="n">256</span><span class="k2">]</span><span class="k2">;</span>

   <a href="http://www.delorie.com/djgpp/doc/libc/libc_737.html" target="_blank">sprintf</a><span class="k2">(</span>text, <span class="s">"%s(%d): %s"</span>, func, <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a>, message<span class="k2">)</span><span class="k2">;</span>
   <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>display, <span class="s">"Error"</span>, NULL, text,
                              NULL, ALLEGRO_MESSAGEBOX_ERROR<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

al_error.h<br />~~~~~~~~~~
</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#ifndef _al_error_h_</span>
<span class="p">#define _al_error_h_</span>

<span class="c">// usage: error(AT, display, "your message here");</span>
<span class="p">#define AT __func__,__LINE__</span>
   <span class="k1">void</span> al_error<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>func, <span class="k1">int</span> <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a>, <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>message<span class="k2">)</span><span class="k2">;</span>

<span class="p">#endif</span>
</pre></div></div><p>



And the two bitmaps I use:<br />dot.png: <a href="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/5/3/534d65e9f90a2276d84f1af856f808fa.png">603494</a></p><p>pacman.png: <a href="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/3/0/30b4df996ec07b3ac30bb116218cf92f.png">603495</a></p><p>There, that&#39;s everything. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Now I&#39;ll try out your suggestions.   I&#39;m using this as a test project to basically get the hang of programming Allegro 5 before I do anything major.</p><p>EDIT: note some comments were left in from allegro 4 and no longer apply.  Like testing the pixels in each bitmap, I now just add up the R G B values together and test, the transparent colour is black so if there is no pixels other than black, the colour will still be zero.  I am sure this could be done better, but it was changed from allegro 4 on the fly.  Also wouldn&#39;t mind speeding the code up where it checks the overlap.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sun, 27 Feb 2011 13:52:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Outside of your for loops where you get the pixel values with <span class="source-code"><a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a></span>, you should lock both of your sprite bitmaps with <span class="source-code"><a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>sprite1-&gt;img , ALLEGRO_LOCK_READONLY , <a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k2">(</span>sprite1-&gt;img<span class="k2">)</span> , <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></span>. That should speed up access to the data. Access to video memory is slow, so that may be your problem, but on the other hand it might slow you down your drawing to use memory bitmaps instead. Don&#39;t forget to <span class="source-code"><a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a></span> when you&#39;re done reading pixels.</p><p>Edit -<br />If you compare the ALLEGRO_COLOR that you get from al_get_pixel to al_map_rgba(0,0,0,0) it would probably be faster than decomposing the color components. Just declare
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> trans <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
outside your for loops.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 27 Feb 2011 14:00:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>How can I compare the ALLEGRO_COLORs?</p><p>I changed pixel1 so that they are ALLEGRO_COLOR and then...</p><p><span class="source-code"><span class="k1">if</span> <span class="k2">(</span>pixel1 <span class="k3">!</span><span class="k3">=</span> trans<span class="k2">)</span></span></p><p>but you can&#39;t do that.</p><p>&quot;\sprite_collide.c|70|error: invalid operands to binary != (have &#39;ALLEGRO_COLOR&#39; and &#39;ALLEGRO_COLOR&#39;)|&quot;</p><p>or did I misunderstand?</p><p>I changed it to:
</p><div class="source-code snippet"><div class="inner"><pre>  <span class="k1">for</span><span class="k2">(</span>cy<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> cy <span class="k3">&lt;</span> over_height<span class="k2">;</span> cy<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
      <span class="k1">for</span><span class="k2">(</span>cx<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> cx <span class="k3">&lt;</span> over_width<span class="k2">;</span> cx<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
         <span class="c">// sample a pixel from each object</span>
         pixel1 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>object1-&gt;img, <span class="k2">(</span>over_left-object1-&gt;x<span class="k2">)</span><span class="k3">+</span>cx, <span class="k2">(</span>over_top-object1-&gt;y<span class="k2">)</span><span class="k3">+</span>cy<span class="k2">)</span><span class="k2">;</span>

         pixel2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>object2-&gt;img, <span class="k2">(</span>over_left-object2-&gt;x<span class="k2">)</span><span class="k3">+</span>cx, <span class="k2">(</span>over_top-object2-&gt;y<span class="k2">)</span><span class="k3">+</span>cy<span class="k2">)</span><span class="k2">;</span>

         <span class="c">// compare the two pixels.  BOTH have to contain a colour other than black (transparent)</span>
         <span class="c">// for a collision to be flaged.  IF either pixel is transparnet than no collision is present.</span>
         <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>pixel1 <span class="k3">!</span><span class="k3">=</span> trans<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>pixel2 <span class="k3">!</span><span class="k3">=</span> trans<span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span> <span class="k1">true</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 (Neil Roy)</author>
		<pubDate>Sun, 27 Feb 2011 14:22:58 +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/606547/905528#target">Neil Roy</a> said:</div><div class="quote"><p>
I changed pixel1 so that they are ALLEGRO_COLOR and then...</p><p><span class="source-code"><span class="k1">if</span> <span class="k2">(</span>pixel1 <span class="k3">!</span><span class="k3">=</span> trans<span class="k2">)</span></span></p><p>but you can&#39;t do that.
</p></div></div><p>
Seriously, you can&#39;t do that? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> ALLEGRO_COLOR is just a struct, it should just do a member by member comparison.</p><p>I tried it myself, and you&#39;re right, it doesn&#39;t work. Sorry. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 27 Feb 2011 14:39:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you lock the images with the same int32 format, you could directly compare their values in memory:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span>lock1-&gt;data<span class="k2">)</span><span class="k2">[</span>x<span class="k2">]</span> <span class="k3">!</span><span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span>lock2-&gt;data<span class="k2">)</span><span class="k2">[</span>x<span class="k2">]</span>

<span class="c">// or </span>
trans <span class="k3">=</span> <span class="n">0xff000000</span><span class="k2">;</span> <span class="c">/* whatever it is */</span>
<span class="k2">(</span><span class="k2">(</span><span class="k1">uint32_t</span> <span class="k3">*</span><span class="k2">)</span>lock1-&gt;data<span class="k2">)</span><span class="k2">[</span>x<span class="k2">]</span> <span class="k3">!</span><span class="k3">=</span> trans
</pre></div></div><p>
Note that the data pointer points to the beginning of image memory, so you would also have to add <span class="source-code"><span class="k2">(</span>y <span class="k3">*</span> lock-&gt;pitch<span class="k2">)</span></span> to it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sun, 27 Feb 2011 14:41:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I changed the collision detector so it locks the bitmaps and still adds up the values, but after looking at the struct for ALLEGRO_COLOR I see it has rgba values in it, so that saves a step.</p><p>It is running very smooth now, no lags.  I suspect locking the bitmaps done it.</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="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;allegro5/allegro_color.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="p">#include "sprite.h"</span>
<span class="number">  6</span><span class="p">#include "sprite_collide.h"</span>
<span class="number">  7</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="c">// Pixel Perfect collision detector</span>
<span class="number"> 10</span><span class="k1">int</span> sprite_collide<span class="k2">(</span>sprite <span class="k3">*</span>object1, sprite <span class="k3">*</span>object2<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 11</span>   <span class="k1">int</span> left1, left2, over_left<span class="k2">;</span>
<span class="number"> 12</span>   <span class="k1">int</span> right1, right2, over_right<span class="k2">;</span>
<span class="number"> 13</span>   <span class="k1">int</span> top1, top2, over_top<span class="k2">;</span>
<span class="number"> 14</span>   <span class="k1">int</span> bottom1, bottom2, over_bottom<span class="k2">;</span>
<span class="number"> 15</span>   <span class="k1">int</span> over_width, over_height<span class="k2">;</span>
<span class="number"> 16</span>   <span class="k1">int</span> cx, cy<span class="k2">;</span>
<span class="number"> 17</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> pixel<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 18</span>   <span class="k1">int</span> sum<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>   left1 <span class="k3">=</span> object1-&gt;x<span class="k2">;</span>
<span class="number"> 21</span>   left2 <span class="k3">=</span> object2-&gt;x<span class="k2">;</span>
<span class="number"> 22</span>   right1 <span class="k3">=</span> object1-&gt;x <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>object1-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>   right2 <span class="k3">=</span> object2-&gt;x <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>object2-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>   top1 <span class="k3">=</span> object1-&gt;y<span class="k2">;</span>
<span class="number"> 25</span>   top2 <span class="k3">=</span> object2-&gt;y<span class="k2">;</span>
<span class="number"> 26</span>   bottom1 <span class="k3">=</span> object1-&gt;y <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>object1-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>   bottom2 <span class="k3">=</span> object2-&gt;y <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>object2-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>
<span class="number"> 30</span>   <span class="c">// First we'll test if the bounding boxes overlap.</span>
<span class="number"> 31</span>   <span class="c">// If they don't overlap at all, there's no sense in checking further.</span>
<span class="number"> 32</span>   <span class="k1">if</span><span class="k2">(</span>bottom1 <span class="k3">&lt;</span> top2<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>   <span class="k1">if</span><span class="k2">(</span>top1 <span class="k3">&gt;</span> bottom2<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>
<span class="number"> 35</span>   <span class="k1">if</span><span class="k2">(</span>right1 <span class="k3">&lt;</span> left2<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>   <span class="k1">if</span><span class="k2">(</span>left1 <span class="k3">&gt;</span> right2<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>
<span class="number"> 38</span>
<span class="number"> 39</span>   <span class="c">// The bounding boxes overlap, so there's a potential collision.</span>
<span class="number"> 40</span>   <span class="c">// We'll store the location of the actual overlap</span>
<span class="number"> 41</span>   <span class="k1">if</span><span class="k2">(</span>bottom1 <span class="k3">&gt;</span> bottom2<span class="k2">)</span> over_bottom <span class="k3">=</span> bottom2<span class="k2">;</span>
<span class="number"> 42</span>   <span class="k1">else</span> over_bottom <span class="k3">=</span> bottom1<span class="k2">;</span>
<span class="number"> 43</span>
<span class="number"> 44</span>   <span class="k1">if</span><span class="k2">(</span>top1 <span class="k3">&lt;</span> top2<span class="k2">)</span> over_top <span class="k3">=</span> top2<span class="k2">;</span>
<span class="number"> 45</span>   <span class="k1">else</span> over_top <span class="k3">=</span> top1<span class="k2">;</span>
<span class="number"> 46</span>
<span class="number"> 47</span>   <span class="k1">if</span><span class="k2">(</span>right1 <span class="k3">&gt;</span> right2<span class="k2">)</span> over_right <span class="k3">=</span> right2<span class="k2">;</span>
<span class="number"> 48</span>   <span class="k1">else</span> over_right <span class="k3">=</span> right1<span class="k2">;</span>
<span class="number"> 49</span>
<span class="number"> 50</span>   <span class="k1">if</span><span class="k2">(</span>left1 <span class="k3">&lt;</span> left2<span class="k2">)</span> over_left <span class="k3">=</span> left2<span class="k2">;</span>
<span class="number"> 51</span>   <span class="k1">else</span> over_left <span class="k3">=</span> left1<span class="k2">;</span>
<span class="number"> 52</span>
<span class="number"> 53</span>   over_height <span class="k3">=</span> over_bottom <span class="k3">-</span> over_top<span class="k2">;</span>
<span class="number"> 54</span>   over_width <span class="k3">=</span> over_right <span class="k3">-</span> over_left<span class="k2">;</span>
<span class="number"> 55</span>
<span class="number"> 56</span>   <a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>object1-&gt;img , <a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k2">(</span>object1-&gt;img<span class="k2">)</span> , ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>   <a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>object2-&gt;img , <a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k2">(</span>object2-&gt;img<span class="k2">)</span> , ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 58</span>   <span class="c">// Okay, we found where the overlap occured and we'll now only check within that area for any</span>
<span class="number"> 59</span>   <span class="c">// collisions.</span>
<span class="number"> 60</span>   <span class="k1">for</span><span class="k2">(</span>cy<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> cy <span class="k3">&lt;</span> over_height<span class="k2">;</span> cy<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 61</span>      <span class="k1">for</span><span class="k2">(</span>cx<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> cx <span class="k3">&lt;</span> over_width<span class="k2">;</span> cx<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 62</span>         <span class="c">// sample a pixel from each object</span>
<span class="number"> 63</span>         pixel<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>object1-&gt;img, <span class="k2">(</span>over_left-object1-&gt;x<span class="k2">)</span><span class="k3">+</span>cx, <span class="k2">(</span>over_top-object1-&gt;y<span class="k2">)</span><span class="k3">+</span>cy<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 64</span>         sum<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> pixel<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.r <span class="k3">+</span> pixel<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.g <span class="k3">+</span> pixel<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.b<span class="k2">;</span>
<span class="number"> 65</span>
<span class="number"> 66</span>         pixel<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>object2-&gt;img, <span class="k2">(</span>over_left-object2-&gt;x<span class="k2">)</span><span class="k3">+</span>cx, <span class="k2">(</span>over_top-object2-&gt;y<span class="k2">)</span><span class="k3">+</span>cy<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 67</span>         sum<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> pixel<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.r <span class="k3">+</span> pixel<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.g <span class="k3">+</span> pixel<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.b<span class="k2">;</span>
<span class="number"> 68</span>
<span class="number"> 69</span>         <span class="c">// the sum of each pixel's RGB components is added together and compared to zero.</span>
<span class="number"> 70</span>         <span class="c">// the sum of either pixel equals zero than there is no collision.  If both pixels</span>
<span class="number"> 71</span>         <span class="c">// have positive sums than a colour exists and we have a collision.</span>
<span class="number"> 72</span>         <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>sum<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>sum<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 73</span>      <span class="k2">}</span>
<span class="number"> 74</span>   <span class="k2">}</span>
<span class="number"> 75</span>
<span class="number"> 76</span>   <span class="c">// couldn't find any collision in the overlap</span>
<span class="number"> 77</span>   <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 78</span><span class="k2">}</span>
</div></div><p>


Hmmm, I just realized that a simpler<br /><span class="source-code"><span class="k1">if</span> <span class="k2">(</span>sum<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> sum<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span> <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></span><br />would do. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sun, 27 Feb 2011 14:49:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You forgot to unlock the bitmaps in your return statement and at the end of the loops.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 27 Feb 2011 14:53:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, I&#39;ll do that... although it didn&#39;t seem to effect the program.</p><p>Also, I noticed that my adding of sums wasn&#39;t 100% effective, it didn&#39;t detect all collisions, I changed it to:</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="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;allegro5/allegro_color.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="p">#include "sprite.h"</span>
<span class="number">  6</span><span class="p">#include "sprite_collide.h"</span>
<span class="number">  7</span><span class="p">#include "al_error.h"</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="c">// Pixel Perfect collision detector</span>
<span class="number"> 10</span><span class="k1">int</span> sprite_collide<span class="k2">(</span>sprite <span class="k3">*</span>object1, sprite <span class="k3">*</span>object2<span class="k2">)</span>
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>   <span class="k1">int</span> left1, left2, over_left<span class="k2">;</span>
<span class="number"> 13</span>   <span class="k1">int</span> right1, right2, over_right<span class="k2">;</span>
<span class="number"> 14</span>   <span class="k1">int</span> top1, top2, over_top<span class="k2">;</span>
<span class="number"> 15</span>   <span class="k1">int</span> bottom1, bottom2, over_bottom<span class="k2">;</span>
<span class="number"> 16</span>   <span class="k1">int</span> over_width, over_height<span class="k2">;</span>
<span class="number"> 17</span>   <span class="k1">int</span> cx, cy<span class="k2">;</span>
<span class="number"> 18</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> pixel<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 19</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> trans <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">0</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="number"> 20</span>   <span class="k1">bool</span> collision <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>   left1 <span class="k3">=</span> object1-&gt;x<span class="k2">;</span>
<span class="number"> 23</span>   left2 <span class="k3">=</span> object2-&gt;x<span class="k2">;</span>
<span class="number"> 24</span>   right1 <span class="k3">=</span> object1-&gt;x <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>object1-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>   right2 <span class="k3">=</span> object2-&gt;x <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>object2-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>   top1 <span class="k3">=</span> object1-&gt;y<span class="k2">;</span>
<span class="number"> 27</span>   top2 <span class="k3">=</span> object2-&gt;y<span class="k2">;</span>
<span class="number"> 28</span>   bottom1 <span class="k3">=</span> object1-&gt;y <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>object1-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>   bottom2 <span class="k3">=</span> object2-&gt;y <span class="k3">+</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>object2-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span>
<span class="number"> 32</span>   <span class="c">// First we'll test if the bounding boxes overlap.</span>
<span class="number"> 33</span>   <span class="c">// If they don't overlap at all, there's no sense in checking further.</span>
<span class="number"> 34</span>   <span class="k1">if</span><span class="k2">(</span>bottom1 <span class="k3">&lt;</span> top2<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>   <span class="k1">if</span><span class="k2">(</span>top1 <span class="k3">&gt;</span> bottom2<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>
<span class="number"> 37</span>   <span class="k1">if</span><span class="k2">(</span>right1 <span class="k3">&lt;</span> left2<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>   <span class="k1">if</span><span class="k2">(</span>left1 <span class="k3">&gt;</span> right2<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>FALSE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>
<span class="number"> 40</span>
<span class="number"> 41</span>   <span class="c">// The bounding boxes overlap, so there's a potential collision.</span>
<span class="number"> 42</span>   <span class="c">// We'll store the location of the actual overlap</span>
<span class="number"> 43</span>   <span class="k1">if</span><span class="k2">(</span>bottom1 <span class="k3">&gt;</span> bottom2<span class="k2">)</span> over_bottom <span class="k3">=</span> bottom2<span class="k2">;</span>
<span class="number"> 44</span>   <span class="k1">else</span> over_bottom <span class="k3">=</span> bottom1<span class="k2">;</span>
<span class="number"> 45</span>
<span class="number"> 46</span>   <span class="k1">if</span><span class="k2">(</span>top1 <span class="k3">&lt;</span> top2<span class="k2">)</span> over_top <span class="k3">=</span> top2<span class="k2">;</span>
<span class="number"> 47</span>   <span class="k1">else</span> over_top <span class="k3">=</span> top1<span class="k2">;</span>
<span class="number"> 48</span>
<span class="number"> 49</span>   <span class="k1">if</span><span class="k2">(</span>right1 <span class="k3">&gt;</span> right2<span class="k2">)</span> over_right <span class="k3">=</span> right2<span class="k2">;</span>
<span class="number"> 50</span>   <span class="k1">else</span> over_right <span class="k3">=</span> right1<span class="k2">;</span>
<span class="number"> 51</span>
<span class="number"> 52</span>   <span class="k1">if</span><span class="k2">(</span>left1 <span class="k3">&lt;</span> left2<span class="k2">)</span> over_left <span class="k3">=</span> left2<span class="k2">;</span>
<span class="number"> 53</span>   <span class="k1">else</span> over_left <span class="k3">=</span> left1<span class="k2">;</span>
<span class="number"> 54</span>
<span class="number"> 55</span>   over_height <span class="k3">=</span> over_bottom <span class="k3">-</span> over_top<span class="k2">;</span>
<span class="number"> 56</span>   over_width <span class="k3">=</span> over_right <span class="k3">-</span> over_left<span class="k2">;</span>
<span class="number"> 57</span>
<span class="number"> 58</span>   <a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>object1-&gt;img , <a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k2">(</span>object1-&gt;img<span class="k2">)</span> , ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 59</span>   <a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>object2-&gt;img , <a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k2">(</span>object2-&gt;img<span class="k2">)</span> , ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 60</span>   <span class="c">// Okay, we found where the overlap occured and we'll now only check within that area for any</span>
<span class="number"> 61</span>   <span class="c">// collisions.</span>
<span class="number"> 62</span>   <span class="k1">for</span><span class="k2">(</span>cy<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> cy <span class="k3">&lt;</span> over_height<span class="k2">;</span> cy<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 63</span>   <span class="k2">{</span>
<span class="number"> 64</span>      <span class="k1">for</span><span class="k2">(</span>cx<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> cx <span class="k3">&lt;</span> over_width<span class="k2">;</span> cx<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 65</span>      <span class="k2">{</span>
<span class="number"> 66</span>         <span class="c">// sample a pixel from each object</span>
<span class="number"> 67</span>         pixel<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>object1-&gt;img, <span class="k2">(</span>over_left-object1-&gt;x<span class="k2">)</span><span class="k3">+</span>cx, <span class="k2">(</span>over_top-object1-&gt;y<span class="k2">)</span><span class="k3">+</span>cy<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 68</span>         pixel<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>object2-&gt;img, <span class="k2">(</span>over_left-object2-&gt;x<span class="k2">)</span><span class="k3">+</span>cx, <span class="k2">(</span>over_top-object2-&gt;y<span class="k2">)</span><span class="k3">+</span>cy<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 69</span>
<span class="number"> 70</span>
<span class="number"> 71</span>         <span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_565.html" target="_blank">memcmp</a><span class="k2">(</span><span class="k3">&amp;</span>pixel<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, <span class="k3">&amp;</span>trans, <span class="k1">sizeof</span><span class="k2">(</span>trans<span class="k2">)</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_565.html" target="_blank">memcmp</a><span class="k2">(</span><span class="k3">&amp;</span>pixel<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, <span class="k3">&amp;</span>trans, <span class="k1">sizeof</span><span class="k2">(</span>trans<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 72</span>         <span class="k2">{</span>
<span class="number"> 73</span>            collision<span class="k3">=</span><span class="k1">true</span><span class="k2">;</span>
<span class="number"> 74</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 75</span>         <span class="k2">}</span>
<span class="number"> 76</span>      <span class="k2">}</span>
<span class="number"> 77</span>      <span class="k1">if</span><span class="k2">(</span>collision<span class="k2">)</span> <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 78</span>   <span class="k2">}</span>
<span class="number"> 79</span>
<span class="number"> 80</span>   <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>object1-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 81</span>   <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>object2-&gt;img<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 82</span>
<span class="number"> 83</span>   <span class="k1">return</span> collision<span class="k2">;</span>
<span class="number"> 84</span><span class="k2">}</span>
</div></div><p>

Which now works perfectly and detects them fine, and skips the step of adding them up which is probably an improvement.</p><p>Edit: I notice a tiny hiccup of a lag... not much, but still... I&#39;ll keep working on this, and try and implement your ideas for comparing the colours.</p><p>Edit2: I wonder if a simple memcmp() would do the trick?</p><p>Edit3: Okay, I just tried memcmp() and it seems to work nicely.  I don&#39;t know if there are any problems with doing it this way, but it seems to be okay.<br />I updated the code above to show what I have now.</p><p>Edit4: Crap, forgot to unlock the bitmaps! <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />  &lt;updated&gt;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Roy)</author>
		<pubDate>Sun, 27 Feb 2011 14:58:12 +0000</pubDate>
	</item>
</rss>
