<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Allegro collision help!</title>
		<link>http://www.allegro.cc/forums/view/594774</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 28 Jan 2008 02:48:03 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello!<br />Do somebody know how to make collision in allegro? I need help and I&#39;m stuck in my game <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" /> I&#39;ve seen a tutorial about it but it just explained how to print &quot;Collision!&quot; if it was true. I thought It would work if I made some variables that switched true or false if the character was in a specific area but it didn&#39;t work out. If you have any idea how I should make it please replay or send any links for tutorials.<br />Thanks! <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>Mrukki
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Thu, 17 Jan 2008 02:35:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This function might help you:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">/*</span></td></tr><tr><td class="number">2</td><td><span class="c">  Sprite structure</span></td></tr><tr><td class="number">3</td><td><span class="c">*/</span></td></tr><tr><td class="number">4</td><td><span class="c">//SPRITE Structure</span></td></tr><tr><td class="number">5</td><td><span class="k1">typedef</span> <span class="k1">struct</span> SPRITE</td></tr><tr><td class="number">6</td><td><span class="k2">{</span></td></tr><tr><td class="number">7</td><td>  <span class="c">//Supported elements</span></td></tr><tr><td class="number">8</td><td>  <span class="k1">int</span> dir, alive<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  </td></tr><tr><td class="number">10</td><td>  <span class="c">//Main Elements</span></td></tr><tr><td class="number">11</td><td>  <span class="k1">int</span> x,y<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  <span class="k1">int</span> width, height<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  <span class="k1">int</span> xspeed, yspeed<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  <span class="k1">int</span> xdelay, ydelay<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  <span class="k1">int</span> xcount, ycount<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  <span class="k1">int</span> curframe, maxframe, animdir<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  <span class="k1">int</span> framecount, framedelay<span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span>SPRITE<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td><span class="c">/* </span></td></tr><tr><td class="number">21</td><td><span class="c">  Check if both sprites are inside each other or touching</span></td></tr><tr><td class="number">22</td><td><span class="c">*/</span></td></tr><tr><td class="number">23</td><td><span class="c">//Inside Function</span></td></tr><tr><td class="number">24</td><td><span class="k1">bool</span> Y_YInside<span class="k2">(</span><span class="k1">int</span> x,<span class="k1">int</span> y,<span class="k1">int</span> left,<span class="k1">int</span> top,<span class="k1">int</span> right,<span class="k1">int</span> bottom<span class="k2">)</span></td></tr><tr><td class="number">25</td><td><span class="k2">{</span></td></tr><tr><td class="number">26</td><td>  <span class="k1">if</span><span class="k2">(</span>x <span class="k3">&gt;</span> left <span class="k3">&amp;</span><span class="k3">&amp;</span> x <span class="k3">&lt;</span> right <span class="k3">&amp;</span><span class="k3">&amp;</span> y <span class="k3">&gt;</span> top <span class="k3">&amp;</span><span class="k3">&amp;</span> y <span class="k3">&lt;</span> bottom<span class="k2">)</span></td></tr><tr><td class="number">27</td><td>  <span class="k2">{</span><span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">28</td><td>  </td></tr><tr><td class="number">29</td><td>  <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td><span class="k2">}</span></td></tr><tr><td class="number">31</td><td>&#160;</td></tr><tr><td class="number">32</td><td><span class="c">/*</span></td></tr><tr><td class="number">33</td><td><span class="c">  This is the main fuction that you are going to use</span></td></tr><tr><td class="number">34</td><td><span class="c">  with this you will know if collition was alive.</span></td></tr><tr><td class="number">35</td><td><span class="c"></span></td></tr><tr><td class="number">36</td><td><span class="c">  This fuction returns true if collition is made.</span></td></tr><tr><td class="number">37</td><td><span class="c">  This fuction will return false if collition is not made.</span></td></tr><tr><td class="number">38</td><td><span class="c">*/</span></td></tr><tr><td class="number">39</td><td>&#160;</td></tr><tr><td class="number">40</td><td><span class="c">//Collition test</span></td></tr><tr><td class="number">41</td><td><span class="k1">bool</span> Y_YCollide<span class="k2">(</span>SPRITE <span class="k3">*</span>a,SPRITE <span class="k3">*</span>b<span class="k2">)</span></td></tr><tr><td class="number">42</td><td><span class="k2">{</span></td></tr><tr><td class="number">43</td><td>  <span class="k1">int</span> wa <span class="k3">=</span> a-&gt;x <span class="k3">+</span> a-&gt;width<span class="k2">;</span></td></tr><tr><td class="number">44</td><td>  <span class="k1">int</span> ha <span class="k3">=</span> a-&gt;y <span class="k3">+</span> a-&gt;height<span class="k2">;</span></td></tr><tr><td class="number">45</td><td>  <span class="k1">int</span> wb <span class="k3">=</span> b-&gt;x <span class="k3">+</span> b-&gt;width<span class="k2">;</span></td></tr><tr><td class="number">46</td><td>  <span class="k1">int</span> hb <span class="k3">=</span> b-&gt;y <span class="k3">+</span> b-&gt;height<span class="k2">;</span></td></tr><tr><td class="number">47</td><td>  <span class="k1">int</span> bx <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>  <span class="k1">int</span> by <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>  </td></tr><tr><td class="number">50</td><td>  <span class="k1">if</span><span class="k2">(</span>Y_YInside<span class="k2">(</span>a-&gt;x, a-&gt;y, b-&gt;x<span class="k3">+</span>bx, b-&gt;y<span class="k3">+</span>by, wb-bx,hb-by<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span></td></tr><tr><td class="number">51</td><td>     Y_YInside<span class="k2">(</span>a-&gt;x, ha, b-&gt;x<span class="k3">+</span>bx, b-&gt;y<span class="k3">+</span>by, wb-bx, hb-by<span class="k2">)</span>  <span class="k3">|</span><span class="k3">|</span></td></tr><tr><td class="number">52</td><td>     Y_YInside<span class="k2">(</span>wa, a-&gt;y, b-&gt;x<span class="k3">+</span>bx, b-&gt;y<span class="k3">+</span>by, wb-bx, hb-by<span class="k2">)</span>  <span class="k3">|</span><span class="k3">|</span></td></tr><tr><td class="number">53</td><td>     Y_YInside<span class="k2">(</span>wa, ha, b-&gt;x<span class="k3">+</span>bx, b-&gt;y<span class="k3">+</span>by, wb-bx, hb-by<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">54</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">55</td><td>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">57</td><td>  </td></tr><tr><td class="number">58</td><td>  <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Yellow_Yackets)</author>
		<pubDate>Thu, 17 Jan 2008 03:48:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>Yellow_Yackets</b>: please use [code]...[/code] tags...</p><p><b>mrukki</b>: for collision detection, tell us what kinds of objects you already have.  You should both their x/y coordinates and their height/width.  You can do rectangular bounds checking (not extremely accurate, but good enough), circular bounds checking (a little more accurate), etc.</p><p>For rectangular bounds checking, use Yellow_Yackets&#39; suggestion.  For circular, simply determine on both objects where you want to ensure that they collide, and then use the distance formula (<tt>sqrt(a^2 + b^2)</tt>) and check that they don&#39;t.  (More accurately: sqrt[(obj1.x - obj2.x)^2 + (obj1.y - obj2.y)^2].)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (TeamTerradactyl)</author>
		<pubDate>Thu, 17 Jan 2008 04:05:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks guys! Now I have one idea! <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> I&#39;m going to make variables for the characters top, bottom, left and right and a function for the other objects with the same idea.<br />Then I&#39;m going to check if the characters bottom value is smaller then the objects top value and if true it can walk and the same idea for all sides <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> But then the character can&#39;t pass the top value of the objects, like if I want to go on the right side of the character. How should I do that?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Thu, 17 Jan 2008 20:26:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">inline</span> <span class="k1">bool</span> collide<span class="k2">(</span><span class="k1">int</span> x1, <span class="k1">int</span> y1, <span class="k1">int</span> x2, <span class="k1">int</span> y2, <span class="k1">int</span> xx1, <span class="k1">int</span> yy1, <span class="k1">int</span> xx2, <span class="k1">int</span> yy2<span class="k2">)</span>
<span class="k2">{</span>
     <span class="k1">if</span> <span class="k2">(</span>x2 <span class="k3">&lt;</span><span class="k3">=</span> xx1<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
     <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>x1 <span class="k3">&gt;</span><span class="k3">=</span> xx2<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
     <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>y2 <span class="k3">&lt;</span><span class="k3">=</span> yy1<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
     <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>y1 <span class="k3">&gt;</span><span class="k3">=</span> yy2<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
     <span class="k1">else</span> <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

<b>Tags:</b> Bounding Box Collision
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Paul whoknows)</author>
		<pubDate>Thu, 17 Jan 2008 21:11:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>A suggestion if you want to go with circular collisions as TeamTerradactyl suggested</p><p>Don&#39;t use sqrt(), it can become a bottle neck for the code, instead of taking the square root of the two squares, square what you are comparing it to.</p><p>(distance ^ 2) &lt; (a^2 + b^2)</p><p>and save on the sqrt() call, also ^ in c/c++ is the xor operator, not power of, so you will have to go </p><p>(distance * distance) &lt; ((a * a) + (b * b))</p><p>-Tim
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Timorg)</author>
		<pubDate>Thu, 17 Jan 2008 21:48:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>Timorg:</b> Thanks, but I&#39;m using cub like players <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p><b>Paul whoknows:</b> Thanks, I understand but not how I should use it? I have 4 variables called walk_u, walk_d, walk_r and walk_l, and I switching them true or false. How can I switch those when I use the function? Can I return the variables? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Fri, 18 Jan 2008 00:18:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>One way is to check an objects future position with the bounding box collision check Paul suggested. That is , if they try to move , find their future position and check it with the bounding box collision function. If there is a collision , then they can&#39;t move that direction so don&#39;t update their position. However , If an object moves more that it&#39;s width combined with another object&#39;s width , then it can skip over the object in front of it using this method.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 18 Jan 2008 00:29:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks! <b>Pauls</b> function works good but it can&#39;t return 3 <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /><br />This is my code:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">inline</span> <span class="k1">bool</span> collide<span class="k2">(</span><span class="k1">int</span> x1, <span class="k1">int</span> y1, <span class="k1">int</span> x2, <span class="k1">int</span> y2, <span class="k1">int</span> xx1, <span class="k1">int</span> yy1, <span class="k1">int</span> xx2, <span class="k1">int</span> yy2<span class="k2">)</span>
<span class="k2">{</span>
<span class="k1">if</span> <span class="k2">(</span>x2 <span class="k3">&gt;</span><span class="k3">=</span> xx1<span class="k2">)</span> <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>x2 <span class="k3">&lt;</span> xx1<span class="k2">)</span> <span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>x1 <span class="k3">&gt;</span><span class="k3">=</span> xx2<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>y2 <span class="k3">&lt;</span><span class="k3">=</span> yy1<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>y1 <span class="k3">&gt;</span><span class="k3">=</span> yy2<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="k2">}</span>

<span class="k1">if</span> <span class="k2">(</span>collide<span class="k2">(</span>image1_bb_left, image1_bb_top, image1_bb_right, image1_bb_bottom, image2_bb_left, image2_bb_top, image2_bb_right, image2_bb_bottom<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
walk_r <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>

<span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>collide<span class="k2">(</span>image1_bb_left, image1_bb_top, image1_bb_right, image1_bb_bottom, image2_bb_left, image2_bb_top, image2_bb_right, image2_bb_bottom<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
walk_r <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
</pre></div></div><p>

thats works good but if I do another statement in the function that I want to return 3 or change 1 to 3 it doesn&#39;t work <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Fri, 18 Jan 2008 01:18:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Depending on what you want to do when a collision happens , if you just want to prevent the player from moving , then this would work fine.</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">bool</span> moveleft <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td><span class="k1">bool</span> moveright <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td><span class="k1">bool</span> moveup <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td><span class="k1">bool</span> movedown <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td><span class="k1">bool</span> moving <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="c">// player and object positions</span></td></tr><tr><td class="number">8</td><td><span class="k1">int</span> ptlx <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td><span class="k1">int</span> ptly <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td><span class="k1">int</span> pbrx <span class="k3">=</span> <span class="n">199</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td><span class="k1">int</span> pbry <span class="k3">=</span> <span class="n">199</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td><span class="k1">int</span> otlx <span class="k3">=</span> <span class="n">300</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td><span class="k1">int</span> otly <span class="k3">=</span> <span class="n">300</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td><span class="k1">int</span> obrx <span class="k3">=</span> <span class="n">349</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td><span class="k1">int</span> obry <span class="k3">=</span> <span class="n">349</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td><span class="k1">const</span> <span class="k1">int</span> v <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span><span class="c">// player x and y velocity when moving</span></td></tr><tr><td class="number">18</td><td><span class="k1">int</span> pvx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k1">int</span> pvy <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="k1">while</span> <span class="k2">(</span>playing_game<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">22</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>moveleft <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>moveleft <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">23</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>moveright <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>moveright <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">24</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>moveup <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>moveup <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">25</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>movedown <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>movedown <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">26</td><td>  moving <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>  pvx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>  pvy <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>  <span class="k1">if</span> <span class="k2">(</span>moveright<span class="k2">)</span> <span class="k2">{</span>pvx <span class="k3">=</span> v<span class="k2">;</span>moving <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">30</td><td>  <span class="k1">if</span> <span class="k2">(</span>moveleft<span class="k2">)</span> <span class="k2">{</span>pvx <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k3">*</span>v<span class="k2">;</span>moving <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">31</td><td>  <span class="k1">if</span> <span class="k2">(</span>moveup<span class="k2">)</span> <span class="k2">{</span>pvy <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k3">*</span>v<span class="k2">;</span>moving <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">32</td><td>  <span class="k1">if</span> <span class="k2">(</span>movedown<span class="k2">)</span> <span class="k2">{</span>pvy <span class="k3">=</span> v<span class="k2">;</span>moving <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">33</td><td>  <span class="k1">if</span> <span class="k2">(</span>moving<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">34</td><td>    <span class="k1">if</span> <span class="k2">(</span>collide<span class="k2">(</span>ptlx <span class="k3">+</span> pvx , ptly <span class="k3">+</span> pvy , pbrx <span class="k3">+</span> pvx , pbry <span class="k3">+</span> pvy , otlx , otly , obrx , obry<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">35</td><td>      moving <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">37</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">38</td><td>  <span class="k1">if</span> <span class="k2">(</span>moving<span class="k2">)</span> <span class="k2">{</span><span class="c">// if moving the player would not cause a collision , move the player and update the screen</span></td></tr><tr><td class="number">39</td><td>    ptlx <span class="k3">+</span><span class="k3">=</span> pvx<span class="k2">;</span></td></tr><tr><td class="number">40</td><td>    ptly <span class="k3">+</span><span class="k3">=</span> pvy<span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    pbrx <span class="k3">+</span><span class="k3">=</span> pvx<span class="k2">;</span></td></tr><tr><td class="number">42</td><td>    pbry <span class="k3">+</span><span class="k3">=</span> pvy<span class="k2">;</span></td></tr><tr><td class="number">43</td><td>    update_screen<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">45</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

However if you&#39;d like to know which side it collided on , since it can only collide on the sides that it was moving towards , then check for overlaps in those directions.<br />Altering the previous code would give :
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">bool</span> moveleft <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td><span class="k1">bool</span> moveright <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td><span class="k1">bool</span> moveup <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td><span class="k1">bool</span> movedown <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td><span class="k1">bool</span> moving <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="k1">bool</span> collidedonleft <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td><span class="k1">bool</span> collidedonright <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td><span class="k1">bool</span> collidedontop <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td><span class="k1">bool</span> collidedonbottom <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><span class="c">// player and object positions</span></td></tr><tr><td class="number">13</td><td><span class="k1">int</span> ptlx <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td><span class="k1">int</span> ptly <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td><span class="k1">int</span> pbrx <span class="k3">=</span> <span class="n">199</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td><span class="k1">int</span> pbry <span class="k3">=</span> <span class="n">199</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td><span class="k1">int</span> otlx <span class="k3">=</span> <span class="n">300</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k1">int</span> otly <span class="k3">=</span> <span class="n">300</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k1">int</span> obrx <span class="k3">=</span> <span class="n">349</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td><span class="k1">int</span> obry <span class="k3">=</span> <span class="n">349</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td><span class="k1">const</span> <span class="k1">int</span> v <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span><span class="c">// player x and y velocity when moving</span></td></tr><tr><td class="number">23</td><td><span class="k1">int</span> pvx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td><span class="k1">int</span> pvy <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td><span class="k1">while</span> <span class="k2">(</span>playing_game<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">27</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>moveleft <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>moveleft <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">28</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>moveright <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>moveright <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">29</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>moveup <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>moveup <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">30</td><td>  <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>movedown <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>movedown <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">31</td><td>  moving <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>  pvx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>  pvy <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>  <span class="k1">if</span> <span class="k2">(</span>moveright<span class="k2">)</span> <span class="k2">{</span>pvx <span class="k3">=</span> v<span class="k2">;</span>moving <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">35</td><td>  <span class="k1">if</span> <span class="k2">(</span>moveleft<span class="k2">)</span> <span class="k2">{</span>pvx <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k3">*</span>v<span class="k2">;</span>moving <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">36</td><td>  <span class="k1">if</span> <span class="k2">(</span>moveup<span class="k2">)</span> <span class="k2">{</span>pvy <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k3">*</span>v<span class="k2">;</span>moving <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">37</td><td>  <span class="k1">if</span> <span class="k2">(</span>movedown<span class="k2">)</span> <span class="k2">{</span>pvy <span class="k3">=</span> v<span class="k2">;</span>moving <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">38</td><td>  <span class="k1">if</span> <span class="k2">(</span>moving<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">39</td><td>    <span class="k1">if</span> <span class="k2">(</span>collide<span class="k2">(</span>ptlx <span class="k3">+</span> pvx , ptly <span class="k3">+</span> pvy , pbrx <span class="k3">+</span> pvx , pbry <span class="k3">+</span> pvy , otlx , otly , obrx , obry<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">40</td><td>      moving <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>      <span class="c">// find out which side collision happened on</span></td></tr><tr><td class="number">42</td><td>      collidedonright <span class="k3">=</span> collidedonleft <span class="k3">=</span> collidedontop <span class="k3">=</span> collidedonbottom <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>      <span class="k1">if</span> <span class="k2">(</span>moveright<span class="k2">)</span> <span class="k2">{</span><span class="k1">if</span> <span class="k2">(</span>pbrx <span class="k3">+</span> pvx <span class="k3">&gt;</span><span class="k3">=</span> otlx<span class="k2">)</span> <span class="k2">{</span>collidedonright <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">44</td><td>      <span class="k1">if</span> <span class="k2">(</span>moveleft<span class="k2">)</span> <span class="k2">{</span><span class="k1">if</span> <span class="k2">(</span>ptlx <span class="k3">+</span> pvx <span class="k3">&lt;</span><span class="k3">=</span> obrx<span class="k2">)</span> <span class="k2">{</span>collidedonleft <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">45</td><td>      <span class="k1">if</span> <span class="k2">(</span>moveup<span class="k2">)</span> <span class="k2">{</span><span class="k1">if</span> <span class="k2">(</span>ptly <span class="k3">+</span> pvy <span class="k3">&lt;</span><span class="k3">=</span> obry<span class="k2">)</span> <span class="k2">{</span>collidedontop <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">46</td><td>      <span class="k1">if</span> <span class="k2">(</span>movedown<span class="k2">)</span> <span class="k2">{</span><span class="k1">if</span> <span class="k2">(</span>pbry <span class="k3">+</span> pvy <span class="k3">&gt;</span><span class="k3">=</span> otly<span class="k2">)</span> <span class="k2">{</span>collidedonbottom <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">47</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">48</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">49</td><td>  <span class="k1">if</span> <span class="k2">(</span>moving<span class="k2">)</span> <span class="k2">{</span><span class="c">// if moving the player would not cause a collision , move the player and update the screen</span></td></tr><tr><td class="number">50</td><td>    ptlx <span class="k3">+</span><span class="k3">=</span> pvx<span class="k2">;</span></td></tr><tr><td class="number">51</td><td>    ptly <span class="k3">+</span><span class="k3">=</span> pvy<span class="k2">;</span></td></tr><tr><td class="number">52</td><td>    pbrx <span class="k3">+</span><span class="k3">=</span> pvx<span class="k2">;</span></td></tr><tr><td class="number">53</td><td>    pbry <span class="k3">+</span><span class="k3">=</span> pvy<span class="k2">;</span></td></tr><tr><td class="number">54</td><td>    update_screen<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">56</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 18 Jan 2008 01:55:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>YES!!! I made it!! I used <b>Pauls</b> idea to make those functions. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> <br />This is my code:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">inline</span> <span class="k1">bool</span> collide_r<span class="k2">(</span><span class="k1">int</span> t1, <span class="k1">int</span> b1, <span class="k1">int</span> r1, <span class="k1">int</span> l1, <span class="k1">int</span> t2, <span class="k1">int</span> b2, <span class="k1">int</span> r2, <span class="k1">int</span> l2<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td><span class="k1">if</span> <span class="k2">(</span>r1 <span class="k3">=</span><span class="k3">=</span> l2 <span class="k3">&amp;</span><span class="k3">&amp;</span> b1 <span class="k3">&gt;</span> t2 <span class="k3">&amp;</span><span class="k3">&amp;</span> t1 <span class="k3">&lt;</span> b2<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td><span class="k1">else</span> <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td><span class="k2">}</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="k1">inline</span> <span class="k1">bool</span> collide_l<span class="k2">(</span><span class="k1">int</span> t1, <span class="k1">int</span> b1, <span class="k1">int</span> r1, <span class="k1">int</span> l1, <span class="k1">int</span> t2, <span class="k1">int</span> b2, <span class="k1">int</span> r2, <span class="k1">int</span> l2<span class="k2">)</span></td></tr><tr><td class="number">8</td><td><span class="k2">{</span></td></tr><tr><td class="number">9</td><td><span class="k1">if</span> <span class="k2">(</span>l1 <span class="k3">=</span><span class="k3">=</span> r2 <span class="k3">&amp;</span><span class="k3">&amp;</span> b1 <span class="k3">&gt;</span> t2 <span class="k3">&amp;</span><span class="k3">&amp;</span> t1 <span class="k3">&lt;</span> b2<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td><span class="k1">else</span> <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td><span class="k2">}</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td><span class="k1">inline</span> <span class="k1">bool</span> collide_t<span class="k2">(</span><span class="k1">int</span> t1, <span class="k1">int</span> b1, <span class="k1">int</span> r1, <span class="k1">int</span> l1, <span class="k1">int</span> t2, <span class="k1">int</span> b2, <span class="k1">int</span> r2, <span class="k1">int</span> l2<span class="k2">)</span></td></tr><tr><td class="number">14</td><td><span class="k2">{</span></td></tr><tr><td class="number">15</td><td><span class="k1">if</span> <span class="k2">(</span>b1 <span class="k3">=</span><span class="k3">=</span> t2 <span class="k3">&amp;</span><span class="k3">&amp;</span> r1 <span class="k3">&gt;</span> l2 <span class="k3">&amp;</span><span class="k3">&amp;</span> l1 <span class="k3">&lt;</span> r2<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td><span class="k1">else</span> <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td><span class="k2">}</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td><span class="k1">inline</span> <span class="k1">bool</span> collide_b<span class="k2">(</span><span class="k1">int</span> t1, <span class="k1">int</span> b1, <span class="k1">int</span> r1, <span class="k1">int</span> l1, <span class="k1">int</span> t2, <span class="k1">int</span> b2, <span class="k1">int</span> r2, <span class="k1">int</span> l2<span class="k2">)</span></td></tr><tr><td class="number">20</td><td><span class="k2">{</span></td></tr><tr><td class="number">21</td><td><span class="k1">if</span> <span class="k2">(</span>t1 <span class="k3">=</span><span class="k3">=</span> b2 <span class="k3">&amp;</span><span class="k3">&amp;</span> r1 <span class="k3">&gt;</span> l2 <span class="k3">&amp;</span><span class="k3">&amp;</span> l1 <span class="k3">&lt;</span> r2<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td><span class="k1">else</span> <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
Thanks everybody! Now I can continue working on my game!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Fri, 18 Jan 2008 03:20:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your code for the collide_r function :
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">inline</span> <span class="k1">bool</span> collide_r<span class="k2">(</span><span class="k1">int</span> t1, <span class="k1">int</span> b1, <span class="k1">int</span> r1, <span class="k1">int</span> l1, <span class="k1">int</span> t2, <span class="k1">int</span> b2, <span class="k1">int</span> r2, <span class="k1">int</span> l2<span class="k2">)</span>
<span class="k2">{</span>
<span class="k1">if</span> <span class="k2">(</span>r1 <span class="k3">=</span><span class="k3">=</span> l2 <span class="k3">&amp;</span><span class="k3">&amp;</span> b1 <span class="k3">&gt;</span> t2 <span class="k3">&amp;</span><span class="k3">&amp;</span> t1 <span class="k3">&lt;</span> b2<span class="k2">)</span> <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="k1">else</span> <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Semantically , that code is :<br />&quot;If<br />(the right edge of object 1 is in the same place as the left edge of object 2) and (the bottom edge of object 1 is lower than the top edge of object 2) and<br />(the top edge of object 1 is higher than the bottom edge of object 2)<br />then no collision occurred , otherwise a collision occurred.&quot;</p><p>First of all , that will only work if you only ever move your objects by one at a time. Second , I think you&#39;ve reversed the value that is returned by it. If all three of the conditions are true then a collision has occurred (The edges are at the same position and their dimensions perpendicular to the direction of movement overlap (collide_r is for when moving right , correct?)) but you return false.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 18 Jan 2008 04:40:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Dang, mrukki, that sure is complicated.</p><p>Why have all those separate functions (and all those passed-in variables)?!</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">enum</span> Collisions</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  COLLISION_NONE, COLLISION_TOP, COLLISION_RIGHT, COLLISION_BOTTOM, COLLISION_LEFT</td></tr><tr><td class="number">4</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="k1">struct</span> Objects</td></tr><tr><td class="number">7</td><td><span class="k2">{</span></td></tr><tr><td class="number">8</td><td>  <span class="k1">int</span> x, y<span class="k2">;</span> <span class="c">// The center of the object</span></td></tr><tr><td class="number">9</td><td>  <span class="k1">int</span> top, left, right, bottom<span class="k2">;</span> <span class="c">// In other words, x1, y1, x2, y2</span></td></tr><tr><td class="number">10</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>image<span class="k2">;</span></td></tr><tr><td class="number">11</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td><span class="k1">int</span> collide_rect<span class="k2">(</span>Objects <span class="k3">&amp;</span>player1, Objects <span class="k3">&amp;</span>player2<span class="k2">)</span></td></tr><tr><td class="number">14</td><td><span class="k2">{</span></td></tr><tr><td class="number">15</td><td>  <span class="k1">int</span> result <span class="k3">=</span> COLLISION_NONE<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td>  <span class="c">// Check if ANY collision has occured</span></td></tr><tr><td class="number">18</td><td>  <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>player1.left <span class="k3">&gt;</span> player2.right<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>player2.left <span class="k3">&gt;</span> player1.right<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span></td></tr><tr><td class="number">19</td><td>      <span class="k2">(</span>player1.top <span class="k3">&gt;</span> player2.bottom<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>player2.top <span class="k3">&gt;</span> player1.bottom<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">20</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">21</td><td>    <span class="c">// The two players are not overlapping in any way, so exit early</span></td></tr><tr><td class="number">22</td><td>    <span class="k1">return</span> result<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td>  <span class="c">// A collision occurred.  Now, determine where it happened...</span></td></tr><tr><td class="number">26</td><td>  <span class="k1">if</span> <span class="k2">(</span>...<span class="k2">)</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td>  <span class="c">// ...</span></td></tr><tr><td class="number">29</td><td>&#160;</td></tr><tr><td class="number">30</td><td>  <span class="k1">return</span> result<span class="k2">;</span></td></tr><tr><td class="number">31</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

This should tell you where the collision hit (by the returned &quot;Collisions&quot; value), and if it returns &quot;none&quot;, then you don&#39;t have to do any further tests.</p><p>Having the structure such that you represent the x/y coordinates (as being the center of the image), you can even use the same structure to do rounded bounds checking (which can be even faster than rectangular bounds checking).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OnlineCop)</author>
		<pubDate>Fri, 18 Jan 2008 06:14:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>Edgar Reynaldo:</b> I have variables called walk_r, walk_l, walk_u and walk_d and if a collision occurred it turns to false and ex walk_r turns false.</p><p><b>OnlineCop:</b> Thanks! <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /> I knew that I could made it esier but not that easy! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>I&#39;ve tried to use <b>OnlineCops</b> function but I getting errors <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /> This is my code:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span>collide_rect<span class="k2">(</span>image1, image2<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> COLLISION_NONE<span class="k2">)</span>
<span class="k2">{</span>
walk_u <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
walk_d <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
walk_l <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
walk_r <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
And I get the error: <i>invalid initialization of reference of type &#39;Objects&amp;&#39; from expression of type &#39;BITMAP*&#39; in passing argument 1 of `int collide_rect(Objects&amp;, Objects&amp;)&#39; </i></p><p>I don&#39;t understand the error but it&#39;s something with image1 and image2,<br />How should I do? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Fri, 18 Jan 2008 23:51:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are you passing a BITMAP* to the function, instead of an object? Here is an example of how to use it if you are:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>Objects object1,object2<span class="k2">;</span></td></tr><tr><td class="number">2</td><td><span class="c">//set up object1</span></td></tr><tr><td class="number">3</td><td>object1.left <span class="k3">=</span> <span class="n">20</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>object1.right <span class="k3">=</span> <span class="n">40</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>object1.top <span class="k3">=</span> <span class="n">50</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>object1.bottom <span class="k3">=</span> <span class="n">80</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>object1.image <span class="k3">=</span> image1<span class="k2">;</span> <span class="c">//assuming that image1 is the bitmap you loaded</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td><span class="c">//set up object2</span></td></tr><tr><td class="number">10</td><td>object2.left <span class="k3">=</span> <span class="n">30</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>object2.right <span class="k3">=</span> <span class="n">55</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>object2.top <span class="k3">=</span> <span class="n">40</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>object2.bottom <span class="k3">=</span> <span class="n">70</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>object2.image <span class="k3">=</span> image2<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td><span class="k1">if</span> <span class="k2">(</span>collide_rect<span class="k2">(</span>object1, object2<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> COLLISION_NONE<span class="k2">)</span></td></tr><tr><td class="number">17</td><td><span class="k2">{</span></td></tr><tr><td class="number">18</td><td>walk_u <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>walk_d <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>walk_l <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>walk_r <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
Hope this helps;D.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (someone972)</author>
		<pubDate>Sat, 19 Jan 2008 02:44:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh yeah! Thanks man! <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> I&#39;ll try this right away! <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p><b>EDITED:</b> OH!! Why won&#39;t it work! I&#39;ve tried all ways but it just don&#39;t work!<br />I used your functions and came up to this:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">enum</span> Collisions</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  COLLISION_NONE, COLLISION_TOP, COLLISION_RIGHT, COLLISION_BOTTOM, COLLISION_LEFT</td></tr><tr><td class="number">4</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="k1">struct</span> Objects</td></tr><tr><td class="number">7</td><td><span class="k2">{</span></td></tr><tr><td class="number">8</td><td><span class="k1">int</span> x, y<span class="k2">;</span> <span class="c">// The center of the object</span></td></tr><tr><td class="number">9</td><td><span class="k1">int</span> top, left, right, bottom<span class="k2">;</span> <span class="c">// In other words, x1, y1, x2, y2</span></td></tr><tr><td class="number">10</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>image<span class="k2">;</span></td></tr><tr><td class="number">11</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td><span class="k1">int</span> collide_rect<span class="k2">(</span>Objects <span class="k3">&amp;</span>player1, Objects <span class="k3">&amp;</span>player2<span class="k2">)</span></td></tr><tr><td class="number">14</td><td><span class="k2">{</span></td></tr><tr><td class="number">15</td><td><span class="k1">int</span> result <span class="k3">=</span> COLLISION_NONE<span class="k2">;</span></td></tr><tr><td class="number">16</td><td><span class="k1">int</span> right <span class="k3">=</span> COLLISION_RIGHT<span class="k2">;</span></td></tr><tr><td class="number">17</td><td><span class="k1">int</span> left <span class="k3">=</span> COLLISION_LEFT<span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k1">int</span> top <span class="k3">=</span> COLLISION_TOP<span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k1">int</span> bottom <span class="k3">=</span> COLLISION_BOTTOM<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>player1.left <span class="k3">&gt;</span> player2.right<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>player2.left <span class="k3">&gt;</span> player1.right<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span></td></tr><tr><td class="number">22</td><td><span class="k2">(</span>player1.top <span class="k3">&gt;</span> player2.bottom<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>player2.top <span class="k3">&gt;</span> player1.bottom<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">23</td><td><span class="k2">{</span></td></tr><tr><td class="number">24</td><td><span class="k1">return</span> result<span class="k2">;</span></td></tr><tr><td class="number">25</td><td><span class="k2">}</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td><span class="k1">if</span> <span class="k2">(</span>player1.right <span class="k3">=</span><span class="k3">=</span> player2.left<span class="k2">)</span></td></tr><tr><td class="number">28</td><td><span class="k1">return</span> right<span class="k2">;</span></td></tr><tr><td class="number">29</td><td>&#160;</td></tr><tr><td class="number">30</td><td><span class="k1">if</span> <span class="k2">(</span>player1.left <span class="k3">=</span><span class="k3">=</span> player2.right<span class="k2">)</span></td></tr><tr><td class="number">31</td><td><span class="k1">return</span> left<span class="k2">;</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td><span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>player1.bottom <span class="k3">=</span><span class="k3">=</span> player2.top<span class="k2">)</span></td></tr><tr><td class="number">34</td><td><span class="k1">return</span> bottom<span class="k2">;</span></td></tr><tr><td class="number">35</td><td>&#160;</td></tr><tr><td class="number">36</td><td><span class="k1">if</span> <span class="k2">(</span>player1.top <span class="k3">=</span><span class="k3">=</span> player2.bottom<span class="k2">)</span></td></tr><tr><td class="number">37</td><td><span class="k1">return</span> top<span class="k2">;</span></td></tr><tr><td class="number">38</td><td><span class="k2">}</span></td></tr><tr><td class="number">39</td><td>&#160;</td></tr><tr><td class="number">40</td><td><span class="c">//-------------------------------------</span></td></tr><tr><td class="number">41</td><td>&#160;</td></tr><tr><td class="number">42</td><td><span class="k1">int</span> charx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td><span class="k1">int</span> chary <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>&#160;</td></tr><tr><td class="number">45</td><td><span class="k1">int</span> l1 <span class="k3">=</span> charx<span class="k2">;</span></td></tr><tr><td class="number">46</td><td><span class="k1">int</span> t1 <span class="k3">=</span> chary<span class="k2">;</span></td></tr><tr><td class="number">47</td><td>&#160;</td></tr><tr><td class="number">48</td><td><span class="k1">int</span> r1 <span class="k3">=</span> <span class="k2">(</span>l1 <span class="k3">+</span> image1-&gt;w<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td><span class="k1">int</span> b1 <span class="k3">=</span> <span class="k2">(</span>t1 <span class="k3">+</span> image1-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>&#160;</td></tr><tr><td class="number">51</td><td><span class="k1">int</span> l2 <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td><span class="k1">int</span> t2 <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">53</td><td>&#160;</td></tr><tr><td class="number">54</td><td><span class="k1">int</span> r2 <span class="k3">=</span> <span class="k2">(</span>l2 <span class="k3">+</span> image2-&gt;w<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td><span class="k1">int</span> b2 <span class="k3">=</span> <span class="k2">(</span>t2 <span class="k3">+</span> image2-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>&#160;</td></tr><tr><td class="number">57</td><td>Objects object1,object2<span class="k2">;</span></td></tr><tr><td class="number">58</td><td>&#160;</td></tr><tr><td class="number">59</td><td>object1.left <span class="k3">=</span> l1<span class="k2">;</span></td></tr><tr><td class="number">60</td><td>object1.right <span class="k3">=</span> r1<span class="k2">;</span></td></tr><tr><td class="number">61</td><td>object1.top <span class="k3">=</span> t1<span class="k2">;</span></td></tr><tr><td class="number">62</td><td>object1.bottom <span class="k3">=</span> b1<span class="k2">;</span></td></tr><tr><td class="number">63</td><td>object1.image <span class="k3">=</span> image1<span class="k2">;</span></td></tr><tr><td class="number">64</td><td>&#160;</td></tr><tr><td class="number">65</td><td>object2.left <span class="k3">=</span> l2<span class="k2">;</span></td></tr><tr><td class="number">66</td><td>object2.right <span class="k3">=</span> r2<span class="k2">;</span></td></tr><tr><td class="number">67</td><td>object2.top <span class="k3">=</span> t2<span class="k2">;</span></td></tr><tr><td class="number">68</td><td>object2.bottom <span class="k3">=</span> b2<span class="k2">;</span></td></tr><tr><td class="number">69</td><td>object2.image <span class="k3">=</span> image2<span class="k2">;</span></td></tr><tr><td class="number">70</td><td>&#160;</td></tr><tr><td class="number">71</td><td><span class="c">//----------------------------------------------------</span></td></tr><tr><td class="number">72</td><td>&#160;</td></tr><tr><td class="number">73</td><td><span class="k1">if</span> <span class="k2">(</span>collide_rect<span class="k2">(</span>object1, object2<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> COLLISION_TOP<span class="k2">)</span></td></tr><tr><td class="number">74</td><td>walk_u <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">75</td><td>&#160;</td></tr><tr><td class="number">76</td><td><span class="k1">if</span> <span class="k2">(</span>collide_rect<span class="k2">(</span>object1, object2<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> COLLISION_BOTTOM<span class="k2">)</span></td></tr><tr><td class="number">77</td><td>walk_d <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">78</td><td>&#160;</td></tr><tr><td class="number">79</td><td><span class="k1">if</span> <span class="k2">(</span>collide_rect<span class="k2">(</span>object1, object2<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> COLLISION_RIGHT<span class="k2">)</span></td></tr><tr><td class="number">80</td><td>walk_r <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">81</td><td>&#160;</td></tr><tr><td class="number">82</td><td><span class="k1">if</span> <span class="k2">(</span>collide_rect<span class="k2">(</span>object1, object2<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> COLLISION_LEFT<span class="k2">)</span></td></tr><tr><td class="number">83</td><td>walk_l <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">84</td><td>walk_r <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">85</td><td>&#160;</td></tr><tr><td class="number">86</td><td><span class="k1">if</span> <span class="k2">(</span>collide_rect<span class="k2">(</span>object1, object2<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> COLLISION_NONE<span class="k2">)</span></td></tr><tr><td class="number">87</td><td><span class="k2">{</span></td></tr><tr><td class="number">88</td><td>walk_u <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">89</td><td>walk_d <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">90</td><td>walk_l <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">91</td><td>walk_r <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">92</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

And when I get in collision it just ignore it, I don&#39;t know how to do?<br />Please help me! <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Sat, 19 Jan 2008 06:19:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You don&#39;t need the lines:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> right <span class="k3">=</span> COLLISION_RIGHT<span class="k2">;</span>
<span class="k1">int</span> left <span class="k3">=</span> COLLISION_LEFT<span class="k2">;</span>
<span class="k1">int</span> top <span class="k3">=</span> COLLISION_TOP<span class="k2">;</span>
<span class="k1">int</span> bottom <span class="k3">=</span> COLLISION_BOTTOM<span class="k2">;</span>
</pre></div></div><p>

I&#39;ve reworked this (haven&#39;t tested it, but logically, it should work...), but try something like this:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">enum</span> Collisions</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  COLLISION_NONE,</td></tr><tr><td class="number">4</td><td>  COLLISION_TOPL, COLLISION_TOPR,       <span class="c">// top-left and top-right</span></td></tr><tr><td class="number">5</td><td>  COLLISION_BOTTOML, COLLISION_BOTTOMR  <span class="c">// bottom-left and bottom-right</span></td></tr><tr><td class="number">6</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="k1">struct</span> Objects</td></tr><tr><td class="number">9</td><td><span class="k2">{</span></td></tr><tr><td class="number">10</td><td>  <span class="k1">int</span> x, y<span class="k2">;</span> <span class="c">// The center of the object</span></td></tr><tr><td class="number">11</td><td>  <span class="k1">int</span> top, left, right, bottom<span class="k2">;</span> <span class="c">// In other words, x1, y1, x2, y2</span></td></tr><tr><td class="number">12</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>image<span class="k2">;</span></td></tr><tr><td class="number">13</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td><span class="k1">int</span> collide_rect<span class="k2">(</span>Objects <span class="k3">&amp;</span>player1, Objects <span class="k3">&amp;</span>player2<span class="k2">)</span></td></tr><tr><td class="number">16</td><td><span class="k2">{</span></td></tr><tr><td class="number">17</td><td>  <span class="k1">int</span> result <span class="k3">=</span> COLLISION_NONE<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>  <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>player1.left <span class="k3">&gt;</span> player2.right<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>player2.left <span class="k3">&gt;</span> player1.right<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span></td></tr><tr><td class="number">20</td><td>      <span class="k2">(</span>player1.top <span class="k3">&gt;</span> player2.bottom<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <span class="k2">(</span>player2.top <span class="k3">&gt;</span> player1.bottom<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">21</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">22</td><td>    <span class="k1">return</span> result<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td>  <span class="c">// To simplify testing, create an array where [0] is always left of [1]</span></td></tr><tr><td class="number">27</td><td>  Objects players<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>  <span class="k1">if</span> <span class="k2">(</span>player1.x <span class="k3">&lt;</span> player2.x<span class="k2">)</span></td></tr><tr><td class="number">29</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">30</td><td>    players<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> player1<span class="k2">;</span></td></tr><tr><td class="number">31</td><td>    players<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> player2<span class="k2">;</span></td></tr><tr><td class="number">32</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">33</td><td>  <span class="k1">else</span></td></tr><tr><td class="number">34</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">35</td><td>    players<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> player2<span class="k2">;</span></td></tr><tr><td class="number">36</td><td>    players<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> player1<span class="k2">;</span></td></tr><tr><td class="number">37</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">38</td><td>  </td></tr><tr><td class="number">39</td><td>  <span class="k1">if</span> <span class="k2">(</span>players<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.right <span class="k3">&gt;</span> players<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.left<span class="k2">)</span></td></tr><tr><td class="number">40</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">41</td><td>    <span class="c">// Possible collision on players[0]'s right side and players[1]'s left</span></td></tr><tr><td class="number">42</td><td>&#160;</td></tr><tr><td class="number">43</td><td>    <span class="c">// Now check for vertical collision</span></td></tr><tr><td class="number">44</td><td>    <span class="k1">if</span> <span class="k2">(</span>players<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.bottom <span class="k3">&gt;</span> players<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.top<span class="k2">)</span></td></tr><tr><td class="number">45</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">46</td><td>      <span class="c">// players[0] collided with players[1]'s top-left</span></td></tr><tr><td class="number">47</td><td>      result <span class="k3">=</span> COLLISION_TOPL<span class="k2">;</span></td></tr><tr><td class="number">48</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">49</td><td>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>players<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.top <span class="k3">&lt;</span> players<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.bottom<span class="k2">)</span></td></tr><tr><td class="number">50</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">51</td><td>      <span class="c">// players[0] collided with players[1]'s bottom-left</span></td></tr><tr><td class="number">52</td><td>      result <span class="k3">=</span> COLLISION_BOTTOML<span class="k2">;</span></td></tr><tr><td class="number">53</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">54</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">55</td><td>  </td></tr><tr><td class="number">56</td><td>  <span class="c">// There is no reason to do a test for "collided on the left side" since</span></td></tr><tr><td class="number">57</td><td>  <span class="c">// the sorting above accomplished this for us implicitely.</span></td></tr><tr><td class="number">58</td><td>&#160;</td></tr><tr><td class="number">59</td><td>  <span class="c">// We'll need to correctly assign where the collision took place, so now</span></td></tr><tr><td class="number">60</td><td>  <span class="c">// test whether players[0] == player1 or player2, and swap accordingly</span></td></tr><tr><td class="number">61</td><td>  <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>players<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> player2<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>result <span class="k3">!</span><span class="k3">=</span> COLLISION_NONE<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">62</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">63</td><td>    <span class="k1">if</span> <span class="k2">(</span>result <span class="k3">=</span><span class="k3">=</span> COLLISION_TOPL<span class="k2">)</span></td></tr><tr><td class="number">64</td><td>      result <span class="k3">=</span> COLLISION_TOPR<span class="k2">;</span></td></tr><tr><td class="number">65</td><td>    <span class="k1">else</span></td></tr><tr><td class="number">66</td><td>      result <span class="k3">=</span> COLLISION_BOTTOMR<span class="k2">;</span></td></tr><tr><td class="number">67</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">68</td><td>&#160;</td></tr><tr><td class="number">69</td><td>  <span class="k1">return</span> result<span class="k2">;</span></td></tr><tr><td class="number">70</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

It may blow up, but I <u>THINK</u> that it should work now.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OnlineCop)</author>
		<pubDate>Sat, 19 Jan 2008 13:41:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Mrukki, in the collision detection code you posted you have the checks as &#39;==&#39;. Ex: <span class="source-code"><span class="k1">if</span><span class="k2">(</span>player1.left <span class="k3">=</span><span class="k3">=</span> player2.right<span class="k2">)</span></span> This wouldn&#39;t always work because player1&#39;s left could be past player2&#39;s right and still be having a collision.<br /> <br /><a href="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/4/a/4a57c3a83c6bcaa650ec5c90a13fc20b.bmp">594280</a><br />Try OnlineCop&#39;s code, it should work.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (someone972)</author>
		<pubDate>Sun, 20 Jan 2008 01:12:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>OnlineCop:</b> Your code is great! But it have an error <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /> I think this <b>should</b> work!:o<br /> It&#39;s in this code thing:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>players<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> player2<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>result <span class="k3">!</span><span class="k3">=</span> COLLISION_NONE<span class="k2">)</span><span class="k2">)</span>
</pre></div></div><p>
 Here&#39;s the error message:<br /> <i>no match for &#39;operator==&#39; in &#39;players[0] == player2&#39;
int operator==(fix, fix)
int operator==(int, fix)
int operator==(fix, long int) 
int operator==(long int, fix)
int operator==(fix, float)
int operator==(float, fix)
int operator==(fix, double)
int operator==(double, fix)</i>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Sun, 20 Jan 2008 05:54:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It should probably be something like:<br /><span class="source-code"><span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>players<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k3">&amp;</span>player2<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> result <span class="k3">!</span><span class="k3">=</span> COLLISION_NONE<span class="k2">)</span><span class="k2">)</span></span></p><p>The &quot;<tt>players[0]</tt>&quot; should be pointing to the address of player2, instead of to the object itself.  See if that helps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OnlineCop)</author>
		<pubDate>Sun, 20 Jan 2008 09:50:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I didn&#39;t work. I got the same error <img src="http://www.allegro.cc/forums/smileys/embarassed.gif" alt=":-[" /> But thanks anyway! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Sun, 20 Jan 2008 14:00:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Semantically , there&#39;s nothing wrong with the line the way it was when you first got the error. From OnlineCop&#39;s code , players[0] and player2 are both &#39;Objects&#39; objects. There may be some kind of include error. That&#39;s usually the only time I see the compiler suggest allegro&#39;s fixed class functions. You may have to actually write an equivalence operator for the Objects class(struct) yourself. I can&#39;t remember if the compiler supplies a default equivalence operator or not.</p><p>From <a> http://www.cplusplus.com/doc/tutorial/classes.html</a> :
</p><div class="quote_container"><div class="title">cplusplus.com said:</div><div class="quote"><p>

But the compiler not only creates a default constructor for you if you do not specify your own. It provides three special member functions in total that are implicitly declared if you do not declare your own. These are the copy constructor, the copy assignment operator, and the default destructor.
</p></div></div><p>

So , no I don&#39;t believe the compiler supplies a default equivalence operator.</p><p>You could write one like this :
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">struct</span> Objects</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">int</span> x, y<span class="k2">;</span> <span class="c">// The center of the object</span></td></tr><tr><td class="number">4</td><td>  <span class="k1">int</span> top, left, right, bottom<span class="k2">;</span> <span class="c">// In other words, x1, y1, x2, y2</span></td></tr><tr><td class="number">5</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>image<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>  <span class="c">// pick one of the following two methods</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>  <span class="c">// to check if all the members are equivalent</span></td></tr><tr><td class="number">10</td><td>  <span class="k1">bool</span> <span class="k1">operator</span><span class="k3">=</span><span class="k3">=</span><span class="k2">(</span><span class="k1">const</span> Objects<span class="k3">&amp;</span> rightside<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">11</td><td>    <span class="k1">if</span> <span class="k2">(</span>x <span class="k3">!</span><span class="k3">=</span> rightside.x<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">12</td><td>    <span class="k1">if</span> <span class="k2">(</span>y <span class="k3">!</span><span class="k3">=</span> rightside.y<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">13</td><td>    <span class="k1">if</span> <span class="k2">(</span>top <span class="k3">!</span><span class="k3">=</span> rightside.top<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">14</td><td>    <span class="k1">if</span> <span class="k2">(</span>left <span class="k3">!</span><span class="k3">=</span> rightside.left<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">15</td><td>    <span class="k1">if</span> <span class="k2">(</span>right <span class="k3">!</span><span class="k3">=</span> rightside.right<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">16</td><td>    <span class="k1">if</span> <span class="k2">(</span>bottom <span class="k3">!</span><span class="k3">=</span> rightside.bottom<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">17</td><td>    <span class="k1">if</span> <span class="k2">(</span>image <span class="k3">!</span><span class="k3">=</span> rightside.image<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">18</td><td>    </td></tr><tr><td class="number">19</td><td>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">21</td><td>  <span class="c">// or use this version to see if they are in fact the same object (same position in memory)</span></td></tr><tr><td class="number">22</td><td>  <span class="k1">bool</span> <span class="k1">operator</span><span class="k3">=</span><span class="k3">=</span><span class="k2">(</span><span class="k1">const</span> Objects<span class="k3">&amp;</span> rightside<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">23</td><td>    <span class="k1">if</span> <span class="k2">(</span><span class="k1">this</span> <span class="k3">=</span><span class="k3">=</span> <span class="k3">&amp;</span>rightside<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></td></tr><tr><td class="number">24</td><td>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">26</td><td><span class="k2">}</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

However , you could accomplish the same thing in OnlineCop&#39;s code by making players[2] an array of two pointers to player1 and player2 instead. You can only do that as long as the function parameters are Objects&amp; (Objects references) though.<br />So you would use these kind of things instead :
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>Objects<span class="k3">*</span> players<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td><span class="k1">if</span> <span class="k2">(</span>player1.x <span class="k3">&lt;</span> player2.x<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  players<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="k3">&amp;</span>player1<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  players<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="k3">&amp;</span>player2<span class="k2">;</span></td></tr><tr><td class="number">5</td><td><span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span></td></tr><tr><td class="number">6</td><td>  players<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <span class="k3">&amp;</span>player2<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  players<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="k3">&amp;</span>player1<span class="k2">;</span></td></tr><tr><td class="number">8</td><td><span class="k2">}</span></td></tr><tr><td class="number">9</td><td><span class="c">// but now you have to use the -&gt; (dereference) operator instead of the . (member access) operator to access the data members</span></td></tr><tr><td class="number">10</td><td><span class="k1">if</span> <span class="k2">(</span>players<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>right <span class="k3">&gt;</span> players<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>left<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">11</td><td>  <span class="c">// the first pointer to a player , it's player's right edge is right of the </span></td></tr><tr><td class="number">12</td><td>  <span class="c">//   other player's left edge</span></td></tr><tr><td class="number">13</td><td><span class="k2">}</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td><span class="c">/// And to check if the objects are the same , just compare their addresses</span></td></tr><tr><td class="number">17</td><td><span class="k1">if</span> <span class="k2">(</span>players<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k3">&amp;</span>player1<span class="k2">)</span> <span class="k2">{</span><span class="c">// do stuff}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 20 Jan 2008 14:45:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>Edgar Reynaldo:</b> Thanks for the code but I think it&#39;s to difficult <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> I&#39;m just a noob and I don&#39;t want to use code that I don&#39;t understand <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> I&#39;ll tried this code but the collision don&#39;t work, the character just pass by <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /> What have I done wrong? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">struct</span> object</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td><span class="k1">int</span> left<span class="k2">;</span></td></tr><tr><td class="number">4</td><td><span class="k1">int</span> right<span class="k2">;</span></td></tr><tr><td class="number">5</td><td><span class="k1">int</span> top<span class="k2">;</span></td></tr><tr><td class="number">6</td><td><span class="k1">int</span> bottom<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>image<span class="k2">;</span></td></tr><tr><td class="number">9</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td><span class="k1">enum</span></td></tr><tr><td class="number">12</td><td><span class="k2">{</span></td></tr><tr><td class="number">13</td><td>collision_left,</td></tr><tr><td class="number">14</td><td>collision_top,</td></tr><tr><td class="number">15</td><td>collision_right,</td></tr><tr><td class="number">16</td><td>collision_bottom,</td></tr><tr><td class="number">17</td><td>collision_none</td></tr><tr><td class="number">18</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td><span class="k1">int</span> box_check<span class="k2">(</span>object <span class="k3">&amp;</span>obj1, object <span class="k3">&amp;</span>obj2<span class="k2">)</span></td></tr><tr><td class="number">21</td><td><span class="k2">{</span></td></tr><tr><td class="number">22</td><td><span class="k1">if</span> <span class="k2">(</span>obj1.bottom <span class="k3">=</span><span class="k3">=</span> obj2.top<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> collision_bottom<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">23</td><td><span class="k1">if</span> <span class="k2">(</span>obj1.top <span class="k3">=</span><span class="k3">=</span> obj2.bottom<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> collision_top<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">24</td><td><span class="k1">if</span> <span class="k2">(</span>obj1.right <span class="k3">=</span><span class="k3">=</span> obj2.left<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> collision_right<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">25</td><td><span class="k1">if</span> <span class="k2">(</span>obj1.left <span class="k3">=</span><span class="k3">=</span> obj2.right<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> collision_left<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">26</td><td><span class="k1">else</span> collision_none<span class="k2">;</span></td></tr><tr><td class="number">27</td><td><span class="k2">}</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td><span class="k1">if</span> <span class="k2">(</span>box_check<span class="k2">(</span>character, tree<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> collision_right<span class="k2">)</span></td></tr><tr><td class="number">30</td><td><span class="k2">{</span></td></tr><tr><td class="number">31</td><td>walk_r <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Wed, 23 Jan 2008 00:53:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That will only work if the character moves 1 pixel at a time. Do you remember to update the bottom right corner position values when the character moves?</p><p>In my previous post , if the code in the first window is too advanced for right now , the code in the second window was just a very minor modification to what you were using from OnlineCop&#39;s code. It was only to prevent the compiler error you were getting by allowing you to check if they were the same objects by checking to see if they had the same address in memory.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 23 Jan 2008 00:59:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve updating the variables like this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span>
<span class="k2">{</span>
<span class="k1">while</span> <span class="k2">(</span>speed <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="k2">{</span>
l1 <span class="k3">=</span> charx<span class="k2">;</span>
t1 <span class="k3">=</span> chary<span class="k2">;</span>

r1 <span class="k3">=</span> <span class="k2">(</span>l1 <span class="k3">+</span> image1-&gt;w<span class="k2">)</span><span class="k2">;</span>
b1 <span class="k3">=</span> <span class="k2">(</span>t1 <span class="k3">+</span> image1-&gt;h<span class="k2">)</span><span class="k2">;</span>

character.left <span class="k3">=</span> l1<span class="k2">;</span>
character.right <span class="k3">=</span> r1<span class="k2">;</span>
character.top <span class="k3">=</span> t1<span class="k2">;</span>
character.bottom <span class="k3">=</span> b1<span class="k2">;</span>
</pre></div></div><p>
Yeah, But I think I&#39;ll first try to get my code to work <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> But thank for the codes I&#39;ll look at it and try to understand <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Wed, 23 Jan 2008 02:40:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay , but how are charx and chary updated?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 23 Jan 2008 03:05:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, but just after those lines I have:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> walk_r <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span>
charx <span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>

<span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> walk_d <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span>
chary <span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
</pre></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Wed, 23 Jan 2008 03:26:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t know what&#39;s going on. Let&#39;s just see all of the code entirely. Upload it as an attachment if you need to and then we can skim through it and see if anything sticks out.</p><p>Maybe I see something.<br />When you call the box_check function , aren&#39;t you comparing their current positions instead of the future position of your player against the current position of the object? That would let objects overlap by one , but it shouldn&#39;t overlap any further.  I don&#39;t notice anything else. Let&#39;s see the whole file for main() and any character or collision code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 23 Jan 2008 11:15:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://willhostforfood.com/files/4564261/collision%20text.txt">Code!</a> <br />There&#39;s the code! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> I hope you or someone else find the error(s) <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /><br />Thanks!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Wed, 23 Jan 2008 12:33:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I put your code up here because it&#39;s easier to refer to and look at with some formatting. There is an attachments button in the post editing area you can upload pictures / code with and then include a link to. 
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">volatile</span> <span class="k1">long</span> speed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><span class="k1">void</span> increment<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">6</td><td><span class="k2">{</span></td></tr><tr><td class="number">7</td><td>speed <span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td><span class="k2">}</span><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>increment<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td><span class="k1">struct</span> object</td></tr><tr><td class="number">11</td><td><span class="k2">{</span></td></tr><tr><td class="number">12</td><td><span class="k1">int</span> left<span class="k2">;</span></td></tr><tr><td class="number">13</td><td><span class="k1">int</span> right<span class="k2">;</span></td></tr><tr><td class="number">14</td><td><span class="k1">int</span> top<span class="k2">;</span></td></tr><tr><td class="number">15</td><td><span class="k1">int</span> bottom<span class="k2">;</span></td></tr><tr><td class="number">16</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>image<span class="k2">;</span></td></tr><tr><td class="number">17</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td><span class="k1">enum</span></td></tr><tr><td class="number">21</td><td><span class="k2">{</span></td></tr><tr><td class="number">22</td><td>collision_left,</td></tr><tr><td class="number">23</td><td>collision_top,</td></tr><tr><td class="number">24</td><td>collision_right,</td></tr><tr><td class="number">25</td><td>collision_bottom,</td></tr><tr><td class="number">26</td><td>collision_none</td></tr><tr><td class="number">27</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td><span class="k1">int</span> box_check<span class="k2">(</span>object <span class="k3">&amp;</span>obj1, object <span class="k3">&amp;</span>obj2<span class="k2">)</span></td></tr><tr><td class="number">30</td><td><span class="k2">{</span></td></tr><tr><td class="number">31</td><td><span class="k1">if</span> <span class="k2">(</span>obj1.bottom <span class="k3">=</span><span class="k3">=</span> obj2.top<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> collision_bottom<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">32</td><td><span class="k1">if</span> <span class="k2">(</span>obj1.top <span class="k3">=</span><span class="k3">=</span> obj2.bottom<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> collision_top<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">33</td><td><span class="k1">if</span> <span class="k2">(</span>obj1.right <span class="k3">=</span><span class="k3">=</span> obj2.left<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> collision_right<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">34</td><td><span class="k1">if</span> <span class="k2">(</span>obj1.left <span class="k3">=</span><span class="k3">=</span> obj2.right<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> collision_left<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">35</td><td><span class="k1">else</span> collision_none<span class="k2">;</span></td></tr><tr><td class="number">36</td><td><span class="k2">}</span></td></tr><tr><td class="number">37</td><td>&#160;</td></tr><tr><td class="number">38</td><td><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></td></tr><tr><td class="number">39</td><td><span class="k2">{</span></td></tr><tr><td class="number">40</td><td><a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td><a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td><a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>&#160;</td></tr><tr><td class="number">44</td><td><a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>speed<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td><a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>increment<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td><a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>increment, BPS_TO_TIMER<span class="k2">(</span><span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>&#160;</td></tr><tr><td class="number">48</td><td><a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">24</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT, <span class="n">400</span>,<span class="n">400</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>&#160;</td></tr><tr><td class="number">51</td><td>&#160;</td></tr><tr><td class="number">52</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>image1 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"character.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">53</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>image2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"tree.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>water <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"water.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">400</span>, <span class="n">400</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>&#160;</td></tr><tr><td class="number">57</td><td><span class="k1">if</span> <span class="k2">(</span>image1 <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span> image2 <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span> water <span class="k3">=</span><span class="k3">=</span> NULL <span class="k3">|</span><span class="k3">|</span> buffer <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">58</td><td><span class="k2">{</span></td></tr><tr><td class="number">59</td><td><a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_TEXT, <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></td></tr><tr><td class="number">60</td><td><a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Could not load bitmap!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">61</td><td><a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span>EXIT_FAILURE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td><span class="k2">}</span></td></tr><tr><td class="number">63</td><td>&#160;</td></tr><tr><td class="number">64</td><td><span class="k1">int</span> charx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">65</td><td><span class="k1">int</span> chary <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">66</td><td>&#160;</td></tr><tr><td class="number">67</td><td><span class="k1">int</span> l1 <span class="k3">=</span> charx<span class="k2">;</span></td></tr><tr><td class="number">68</td><td><span class="k1">int</span> t1 <span class="k3">=</span> chary<span class="k2">;</span></td></tr><tr><td class="number">69</td><td>&#160;</td></tr><tr><td class="number">70</td><td><span class="k1">int</span> r1 <span class="k3">=</span> <span class="k2">(</span>l1 <span class="k3">+</span> image1-&gt;w<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">71</td><td><span class="k1">int</span> b1 <span class="k3">=</span> <span class="k2">(</span>t1 <span class="k3">+</span> image1-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">72</td><td>&#160;</td></tr><tr><td class="number">73</td><td><span class="k1">int</span> l2 <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">74</td><td><span class="k1">int</span> t2 <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">75</td><td>&#160;</td></tr><tr><td class="number">76</td><td><span class="k1">int</span> r2 <span class="k3">=</span> <span class="k2">(</span>l2 <span class="k3">+</span> image2-&gt;w<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">77</td><td><span class="k1">int</span> b2 <span class="k3">=</span> <span class="k2">(</span>t2 <span class="k3">+</span> image2-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">78</td><td>&#160;</td></tr><tr><td class="number">79</td><td><span class="k1">int</span> l3 <span class="k3">=</span> <span class="n">200</span><span class="k2">;</span></td></tr><tr><td class="number">80</td><td><span class="k1">int</span> t3 <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">81</td><td>&#160;</td></tr><tr><td class="number">82</td><td><span class="k1">int</span> r3 <span class="k3">=</span> <span class="k2">(</span>l3 <span class="k3">+</span> water-&gt;w<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">83</td><td><span class="k1">int</span> b3 <span class="k3">=</span> <span class="k2">(</span>t3 <span class="k3">+</span> water-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">84</td><td>&#160;</td></tr><tr><td class="number">85</td><td><span class="k1">bool</span> walk_d <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">86</td><td><span class="k1">bool</span> walk_u <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">87</td><td><span class="k1">bool</span> walk_r <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">88</td><td><span class="k1">bool</span> walk_l <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">89</td><td>&#160;</td></tr><tr><td class="number">90</td><td>object character,tree<span class="k2">;</span></td></tr><tr><td class="number">91</td><td><span class="c">//set up object1</span></td></tr><tr><td class="number">92</td><td>character.left <span class="k3">=</span> l1<span class="k2">;</span></td></tr><tr><td class="number">93</td><td>character.right <span class="k3">=</span> r1<span class="k2">;</span></td></tr><tr><td class="number">94</td><td>character.top <span class="k3">=</span> t1<span class="k2">;</span></td></tr><tr><td class="number">95</td><td>character.bottom <span class="k3">=</span> b1<span class="k2">;</span></td></tr><tr><td class="number">96</td><td>character.image <span class="k3">=</span> image1<span class="k2">;</span> <span class="c">//assuming that image1 is the bitmap you loaded</span></td></tr><tr><td class="number">97</td><td>&#160;</td></tr><tr><td class="number">98</td><td><span class="c">//set up object2</span></td></tr><tr><td class="number">99</td><td>tree.left <span class="k3">=</span> l2<span class="k2">;</span></td></tr><tr><td class="number">100</td><td>tree.right <span class="k3">=</span> r2<span class="k2">;</span></td></tr><tr><td class="number">101</td><td>tree.top <span class="k3">=</span> t2<span class="k2">;</span></td></tr><tr><td class="number">102</td><td>tree.bottom <span class="k3">=</span> b2<span class="k2">;</span></td></tr><tr><td class="number">103</td><td>tree.image <span class="k3">=</span> image2<span class="k2">;</span></td></tr><tr><td class="number">104</td><td>&#160;</td></tr><tr><td class="number">105</td><td><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">106</td><td><span class="k2">{</span></td></tr><tr><td class="number">107</td><td><span class="k1">while</span> <span class="k2">(</span>speed <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">108</td><td><span class="k2">{</span></td></tr><tr><td class="number">109</td><td>l1 <span class="k3">=</span> charx<span class="k2">;</span></td></tr><tr><td class="number">110</td><td>t1 <span class="k3">=</span> chary<span class="k2">;</span></td></tr><tr><td class="number">111</td><td>&#160;</td></tr><tr><td class="number">112</td><td>r1 <span class="k3">=</span> <span class="k2">(</span>l1 <span class="k3">+</span> image1-&gt;w<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">113</td><td>b1 <span class="k3">=</span> <span class="k2">(</span>t1 <span class="k3">+</span> image1-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">114</td><td>&#160;</td></tr><tr><td class="number">115</td><td>character.left <span class="k3">=</span> l1<span class="k2">;</span></td></tr><tr><td class="number">116</td><td>character.right <span class="k3">=</span> r1<span class="k2">;</span></td></tr><tr><td class="number">117</td><td>character.top <span class="k3">=</span> t1<span class="k2">;</span></td></tr><tr><td class="number">118</td><td>character.bottom <span class="k3">=</span> b1<span class="k2">;</span></td></tr><tr><td class="number">119</td><td><span class="c">//--------------------------------</span></td></tr><tr><td class="number">120</td><td><span class="k1">if</span> <span class="k2">(</span>box_check<span class="k2">(</span>character, tree<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> collision_none<span class="k2">)</span></td></tr><tr><td class="number">121</td><td><span class="k2">{</span></td></tr><tr><td class="number">122</td><td><span class="k1">return</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">123</td><td><span class="k2">}</span></td></tr><tr><td class="number">124</td><td><span class="c">//---------------------------------------------</span></td></tr><tr><td class="number">125</td><td><span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> walk_r <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span></td></tr><tr><td class="number">126</td><td>charx <span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">127</td><td>&#160;</td></tr><tr><td class="number">128</td><td><span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> walk_l <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span></td></tr><tr><td class="number">129</td><td>charx <span class="k3">-</span><span class="k3">-</span><span class="k2">;</span></td></tr><tr><td class="number">130</td><td>&#160;</td></tr><tr><td class="number">131</td><td><span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> walk_d <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span></td></tr><tr><td class="number">132</td><td>chary <span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">133</td><td>&#160;</td></tr><tr><td class="number">134</td><td><span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> walk_u <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span></td></tr><tr><td class="number">135</td><td>chary <span class="k3">-</span><span class="k3">-</span><span class="k2">;</span></td></tr><tr><td class="number">136</td><td>&#160;</td></tr><tr><td class="number">137</td><td>speed <span class="k3">-</span><span class="k3">-</span><span class="k2">;</span></td></tr><tr><td class="number">138</td><td><span class="k2">}</span></td></tr><tr><td class="number">139</td><td><a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>buffer, image1, charx, chary<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">140</td><td><a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>buffer, image2, <span class="n">100</span>, <span class="n">100</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">141</td><td><a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>buffer, water, <span class="n">200</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">142</td><td><a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">0</span>,<span class="n">0</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"Collision test"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">143</td><td>&#160;</td></tr><tr><td class="number">144</td><td><a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">400</span>, <span class="n">400</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">145</td><td><a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">146</td><td><span class="k2">}</span></td></tr><tr><td class="number">147</td><td>&#160;</td></tr><tr><td class="number">148</td><td><a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">149</td><td><a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>image1<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">150</td><td><a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>image2<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">151</td><td>&#160;</td></tr><tr><td class="number">152</td><td><span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">153</td><td><span class="k2">}</span><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr></tbody></table></div></div><p>

If you look at the code right around your call to the box_check function :<br /> </p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span>box_check<span class="k2">(</span>character, tree<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> collision_none<span class="k2">)</span>
<span class="k2">{</span>
<span class="k1">return</span> <span class="n">1</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
Why is return 1 there? If there&#39;s no collision quit?</p><p>But that&#39;s besides the point , right around the call to box_check , you never set all your walk_direction variables to true each time through the loop and check to see if they should be false by looking at the value box_check returns.</p><p>You should set all four walk_ variables to true each time through the while loop and then use the return value of box_check to decide whether any of those variables should be set to false to prevent movement in that direction.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 23 Jan 2008 12:59:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh, I just used that just to test <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> It should look like this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span>box_check<span class="k2">(</span>character, tree<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> collision_none<span class="k2">)</span>
<span class="k2">{</span>
walk_u <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
walk_d <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
walk_r <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
walk_l <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
Do you mean that I should do like this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span>
<span class="k2">{</span>
<span class="k1">while</span> <span class="k2">(</span>speed <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="k2">{</span>
walk_u <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
walk_d <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
walk_r <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
walk_l <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
</pre></div></div><p>
And then the rest of the loop? <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Wed, 23 Jan 2008 16:30:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
You have to use the result of box_check to set the variables that allow your character to walk in a certain direction :</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">int</span> collision_state <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">4</td><td><span class="k2">{</span></td></tr><tr><td class="number">5</td><td><span class="k1">while</span> <span class="k2">(</span>speed <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">6</td><td><span class="k2">{</span></td></tr><tr><td class="number">7</td><td>walk_u <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>walk_d <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>walk_r <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>walk_l <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>collision_state <span class="k3">=</span> box_check<span class="k2">(</span>character , tree<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="k1">switch</span> <span class="k2">(</span>collision_state<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">15</td><td>  <span class="k1">case</span> collision_none <span class="k2">:</span> <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  <span class="k1">case</span> collision_left <span class="k2">:</span> walk_l <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  <span class="k1">case</span> collision_right <span class="k2">:</span> walk_r <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <span class="k1">case</span> collision_top <span class="k2">:</span> walk_u <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>  <span class="k1">case</span> collision_bottom <span class="k2">:</span> walk_d <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  <span class="k1">default</span> <span class="k2">:</span> <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td><span class="k2">}</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td><span class="c">// Now you can decide whether to let the player walk in a certain direction or not</span></td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td><span class="c">// rest of code...</span></td></tr><tr><td class="number">26</td><td><span class="k2">}</span></td></tr><tr><td class="number">27</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Like I said though , this method will let your character overlap other objects by one pixel because it checks whether the character is currently overlapping another object , not whether it would after it moved one in that direction.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 24 Jan 2008 05:44:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Wow, Thanks man! <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> This code looks really good! I&#39;ll try it later, need to go to school now <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> </p><p><b>EDITED:</b> Oh, It didn&#39;t work <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" /> I used your code and the character couldn&#39;t go through the tree but not around it either <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /> I don&#39;t understand what&#39;s wrong. But thanks anyway!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Thu, 24 Jan 2008 12:27:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>Warning: this is a very long post.</b></p><p>The box_check function isn&#39;t set up right.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> box_check<span class="k2">(</span>object <span class="k3">&amp;</span>obj1, object <span class="k3">&amp;</span>obj2<span class="k2">)</span>
<span class="k2">{</span>
<span class="k1">if</span> <span class="k2">(</span>obj1.bottom <span class="k3">=</span><span class="k3">=</span> obj2.top<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> collision_bottom<span class="k2">;</span> <span class="k2">}</span>
<span class="k1">if</span> <span class="k2">(</span>obj1.top <span class="k3">=</span><span class="k3">=</span> obj2.bottom<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> collision_top<span class="k2">;</span> <span class="k2">}</span>
<span class="k1">if</span> <span class="k2">(</span>obj1.right <span class="k3">=</span><span class="k3">=</span> obj2.left<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> collision_right<span class="k2">;</span> <span class="k2">}</span>
<span class="k1">if</span> <span class="k2">(</span>obj1.left <span class="k3">=</span><span class="k3">=</span> obj2.right<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> collision_left<span class="k2">;</span> <span class="k2">}</span>
<span class="k1">else</span> collision_none<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
The last line should return collision_none, otherwise it won&#39;t tell you there wasn&#39;t a collision. Also, in the if statements it checks only for the x or y position. This will cause problems. For example:</p><pre>
</pre><p>
<img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/5/0/507666bddcaa1d46df7f50053c805097.png" alt="594342" width="122" height="90" /><br />See how object1.right equals object2.left, setting off the collision check, but the object is above the other. I have fixed the function and changed the way objects are handled so that it is easier to use. I will explain them below.</p><p><b>The new object structure</b>
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> object
<span class="k2">{</span>
<span class="k1">int</span> x<span class="k2">;</span>
<span class="k1">int</span> y<span class="k2">;</span>
<span class="k1">int</span> w<span class="k2">;</span>
<span class="k1">int</span> h<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>image<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

This allows you to easily move and setup the object. This combined with the new collision function make it so you can do this to set them up and move them.
</p><div class="source-code snippet"><div class="inner"><pre>object player<span class="k2">;</span>
player.x <span class="k3">=</span> <span class="n">20</span><span class="k2">;</span>
player.y <span class="k3">=</span> <span class="n">20</span><span class="k2">;</span>
player.w <span class="k3">=</span> image1-&gt;w<span class="k2">;</span>
player.h <span class="k3">=</span> image1-&gt;h<span class="k2">;</span>
player.image <span class="k3">=</span> image1<span class="k2">;</span>

<span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="c">//...</span>
<span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span>
player.x<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="c">//etc.</span>
<span class="k2">}</span>
</pre></div></div><p>

<b>The new collision detection function</b>
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">int</span> box_check<span class="k2">(</span>object <span class="k3">&amp;</span>obj1, object <span class="k3">&amp;</span>obj2,<span class="k1">int</span> <span class="k3">&amp;</span> ov<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td><span class="k1">if</span> <span class="k2">(</span>obj1.y<span class="k3">+</span>obj1.h <span class="k3">&gt;</span><span class="k3">=</span> obj2.y <span class="k3">&amp;</span><span class="k3">&amp;</span> obj1.y <span class="k3">&lt;</span><span class="k3">=</span> obj2.y<span class="k3">+</span>obj2.h <span class="k3">&amp;</span><span class="k3">&amp;</span> </td></tr><tr><td class="number">4</td><td>    obj1.x<span class="k3">+</span>obj1.w <span class="k3">&gt;</span><span class="k3">=</span> obj2.x <span class="k3">&amp;</span><span class="k3">&amp;</span> obj1.x <span class="k3">&lt;</span><span class="k3">=</span> obj2.x<span class="k3">+</span>obj2.w<span class="k2">)</span> </td></tr><tr><td class="number">5</td><td>   <span class="k2">{</span> </td></tr><tr><td class="number">6</td><td>     <span class="k1">int</span> side <span class="k3">=</span> collision_bottom<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>     <span class="k1">int</span> overlap <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span><span class="k2">(</span>obj1.y<span class="k3">+</span>obj1.h<span class="k2">)</span> <span class="k3">-</span> obj2.y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>     <span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>obj1.y <span class="k3">-</span> <span class="k2">(</span>obj2.y<span class="k3">+</span>obj2.h<span class="k2">)</span><span class="k2">)</span> <span class="k3">&lt;</span> overlap<span class="k2">)</span></td></tr><tr><td class="number">9</td><td>     <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>       overlap <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>obj1.y <span class="k3">-</span> <span class="k2">(</span>obj2.y<span class="k3">+</span>obj2.h<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>       side <span class="k3">=</span> collision_top<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>     <span class="k2">}</span></td></tr><tr><td class="number">13</td><td>     <span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span><span class="k2">(</span>obj1.x<span class="k3">+</span>obj1.w<span class="k2">)</span> <span class="k3">-</span> obj2.x<span class="k2">)</span> <span class="k3">&lt;</span> overlap<span class="k2">)</span></td></tr><tr><td class="number">14</td><td>     <span class="k2">{</span></td></tr><tr><td class="number">15</td><td>       overlap <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span><span class="k2">(</span>obj1.x<span class="k3">+</span>obj1.w<span class="k2">)</span> <span class="k3">-</span> obj2.x<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>       side <span class="k3">=</span> collision_right<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>     <span class="k2">}</span></td></tr><tr><td class="number">18</td><td>     <span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>obj1.x <span class="k3">-</span> <span class="k2">(</span>obj2.x<span class="k3">+</span>obj2.w<span class="k2">)</span><span class="k2">)</span> <span class="k3">&lt;</span> overlap<span class="k2">)</span></td></tr><tr><td class="number">19</td><td>     <span class="k2">{</span></td></tr><tr><td class="number">20</td><td>       overlap <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>obj1.x <span class="k3">-</span> <span class="k2">(</span>obj2.x<span class="k3">+</span>obj2.w<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>       side <span class="k3">=</span> collision_left<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>     <span class="k2">}</span></td></tr><tr><td class="number">23</td><td>     ov <span class="k3">=</span> overlap<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>     <span class="k1">return</span> side<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">26</td><td><span class="k1">else</span> <span class="k1">return</span> collision_none<span class="k2">;</span></td></tr><tr><td class="number">27</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
This may seem complicated at first, but it is actually pretty simple. First is: </p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>obj1.y<span class="k3">+</span>obj1.h <span class="k3">&gt;</span><span class="k3">=</span> obj2.y <span class="k3">&amp;</span><span class="k3">&amp;</span> obj1.y <span class="k3">&lt;</span><span class="k3">=</span> obj2.y<span class="k3">+</span>obj2.h <span class="k3">&amp;</span><span class="k3">&amp;</span> 
    obj1.x<span class="k3">+</span>obj1.w <span class="k3">&gt;</span><span class="k3">=</span> obj2.x <span class="k3">&amp;</span><span class="k3">&amp;</span> obj1.x <span class="k3">&lt;</span><span class="k3">=</span> obj2.x<span class="k3">+</span>obj2.w<span class="k2">)</span>
</pre></div></div><p>
This checks if there was a collision and works even if the object is not exactly on the edge of the other. It is basically 
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>obj1.bottom <span class="k3">&gt;</span><span class="k3">=</span> obj2.top <span class="k3">&amp;</span><span class="k3">&amp;</span> obj1.top <span class="k3">&lt;</span><span class="k3">=</span> obj2.bottom <span class="k3">&amp;</span><span class="k3">&amp;</span>
    obj1.rgiht <span class="k3">&gt;</span><span class="k3">=</span> obj2.left <span class="k3">&amp;</span><span class="k3">&amp;</span> obj1.left <span class="k3">&lt;</span><span class="k3">=</span> obj2.right<span class="k2">)</span>
</pre></div></div><p> Here is a picture explaining it more.</p><pre>
</pre><p> <img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/3/3/33ba4d9e924f26eec38045d4d61de19a.gif" alt="594343" width="130" height="100" /><br />Next is these lines:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> side <span class="k3">=</span> collision_bottom<span class="k2">;</span>
<span class="k1">int</span> overlap <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span><span class="k2">(</span>obj1.y<span class="k3">+</span>obj1.h<span class="k2">)</span> <span class="k3">-</span> obj2.y<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
The side is the side of collision which is returned, just like in the other function. Overlap is how far one shape is inside the other and should be used to move the shape out. Finally these lines:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>obj1.y <span class="k3">-</span> <span class="k2">(</span>obj2.y<span class="k3">+</span>obj2.h<span class="k2">)</span><span class="k2">)</span> <span class="k3">&lt;</span> overlap<span class="k2">)</span>
<span class="k2">{</span>
  overlap <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>obj1.y <span class="k3">-</span> <span class="k2">(</span>obj2.y<span class="k3">+</span>obj2.h<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
  side <span class="k3">=</span> collision_top<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
This check the next side. If the overlap is less than that is the side closest to the edge and is where it should be removed from. This is continued for all the sides. Then it just sets the overlap variable and returns the side of collision.<br />Example:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> overlap<span class="k2">;</span>
collision_state <span class="k3">=</span> box_check<span class="k2">(</span>character , tree,overlap<span class="k2">)</span><span class="k2">;</span>

<span class="k1">switch</span> <span class="k2">(</span>collision_state<span class="k2">)</span> <span class="k2">{</span>
  <span class="k1">case</span> collision_none <span class="k2">:</span>
      overlap <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="k1">break</span><span class="k2">;</span>
  <span class="k1">case</span> collision_left <span class="k2">:</span> character.x <span class="k3">+</span><span class="k3">=</span> overlap<span class="k2">;</span>walk_l <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k1">break</span><span class="k2">;</span>
  <span class="k1">case</span> collision_right <span class="k2">:</span> character.x <span class="k3">-</span><span class="k3">=</span> overlap<span class="k2">;</span>walk_r <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k1">break</span><span class="k2">;</span>
  <span class="k1">case</span> collision_top <span class="k2">:</span> character.y <span class="k3">+</span><span class="k3">=</span> overlap<span class="k2">;</span>walk_u <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k1">break</span><span class="k2">;</span>
  <span class="k1">case</span> collision_bottom <span class="k2">:</span> character.y <span class="k3">-</span><span class="k3">=</span> overlap<span class="k2">;</span>walk_d <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
  <span class="k1">default</span> <span class="k2">:</span> <span class="k1">break</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
With this you can move the objects larger amounts and it will still collide correctly.</p><pre>
</pre><p><b>Conclusion</b><br />I have attached the revised <a href="http://www.allegro.cc/files/attachment/594344">code</a> for your project. Hopefully this helps you with your problem, sorry that it was so long.:-/ If you have any problems or questions just post again. Happy coding!;D
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (someone972)</author>
		<pubDate>Sat, 26 Jan 2008 05:44:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>(bump)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Sat, 26 Jan 2008 06:31:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh yeah!! I&#39;t working! <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> Thanks man! <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> I tried to add objects and it worked. Thanks  so much! Now I can start working on my game again. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> Thanks again!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (mrukki)</author>
		<pubDate>Mon, 28 Jan 2008 02:48:03 +0000</pubDate>
	</item>
</rss>
