<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Collision with Mappy</title>
		<link>http://www.allegro.cc/forums/view/613869</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 04 Feb 2014 03:04:51 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello,</p><p>I am using Mappy with Allegro 5 to create and render my map however I am having trouble creating a working pixel perfect collision check for the walls.</p><p>The walls are flagged in mappy and I have a function set up to check:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number"> 1</span><span class="k1">int</span> Map::collided<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span>
<span class="number"> 2</span><span class="k2">{</span>
<span class="number"> 3</span>  BLKSTR <span class="k3">*</span>blockdata<span class="k2">;</span>
<span class="number"> 4</span>  blockdata <span class="k3">=</span> MapGetBlockInPixels<span class="k2">(</span>x,y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 5</span>
<span class="number"> 6</span>  <span class="k1">return</span> <span class="k2">(</span>blockdata-&gt;user1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 7</span><span class="k2">}</span>
</div></div><p>

And I have checks for all directions, the up and down functions seem to be working perfectly however the left and right ones are not:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  2</span><span class="k1">bool</span> Character::collideLeft<span class="k2">(</span><span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>  <span class="k1">int</span> highX <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  5</span>  <span class="k1">int</span> highY <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>  <span class="k1">if</span><span class="k2">(</span>p_Map-&gt;collided<span class="k2">(</span>m_xpos, m_ypos<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> p_Map-&gt;collided<span class="k2">(</span>m_xpos, m_ypos<span class="k3">+</span>m_height-1<span class="k2">)</span><span class="k2">)</span>
<span class="number">  8</span>  <span class="k2">{</span>
<span class="number">  9</span>    <a href="http://www.allegro.cc/manual/al_lock_bitmap"><span class="a">al_lock_bitmap</span></a><span class="k2">(</span>m_sys_bitmap, <a href="http://www.allegro.cc/manual/al_get_bitmap_format"><span class="a">al_get_bitmap_format</span></a><span class="k2">(</span>m_sys_bitmap<span class="k2">)</span>, ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> pixel<span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> m_frame_column<span class="k3">*</span>m_width<span class="k2">;</span> x <span class="k3">&lt;</span> <span class="k2">(</span>m_frame_column<span class="k3">*</span>m_width<span class="k2">)</span><span class="k3">+</span>m_width<span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 14</span>      <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> m_frame_row<span class="k2">;</span> y <span class="k3">&lt;</span> <span class="k2">(</span>m_frame_row<span class="k3">*</span>m_height<span class="k2">)</span><span class="k3">+</span>m_height<span class="k3">+</span><span class="n">1</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 15</span>      <span class="k2">{</span>
<span class="number"> 16</span>        pixel <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>m_sys_bitmap, x, y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>        <span class="k1">if</span><span class="k2">(</span>pixel.a <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 19</span>        <span class="k2">{</span>
<span class="number"> 20</span>          <span class="k1">if</span><span class="k2">(</span>y <span class="k3">&lt;</span> highY<span class="k2">)</span>
<span class="number"> 21</span>            highY <span class="k3">=</span> y<span class="k2">;</span>
<span class="number"> 22</span>          <span class="k1">if</span><span class="k2">(</span>x <span class="k3">&lt;</span> highY<span class="k2">)</span>
<span class="number"> 23</span>            highX <span class="k3">=</span> x<span class="k2">;</span>  
<span class="number"> 24</span>        <span class="k2">}</span>            
<span class="number"> 25</span>      <span class="k2">}</span>
<span class="number"> 26</span>
<span class="number"> 27</span>      <span class="k1">if</span><span class="k2">(</span>p_Map-&gt;collided<span class="k2">(</span>m_xpos<span class="k3">+</span>highX,m_ypos<span class="k3">+</span>highY<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 28</span>      <span class="k2">{</span>
<span class="number"> 29</span>        cout <span class="k3">&lt;</span><span class="k3">&lt;</span> highX <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">", "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> highY <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 30</span>        <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>m_sys_bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>        <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 32</span>      <span class="k2">}</span>
<span class="number"> 33</span>
<span class="number"> 34</span>      <span class="k1">else</span>
<span class="number"> 35</span>      <span class="k2">{</span>
<span class="number"> 36</span>        <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>m_sys_bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>        <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 38</span>      <span class="k2">}</span>
<span class="number"> 39</span>    <span class="k2">}</span>
<span class="number"> 40</span><span class="k2">}</span>
</div></div><p>

Now I have tried many methods and can see the flaws in the one above however this is the attempt I tried last, could anyone advise me on a simpler method, perhaps checking pixels on system bitmaps isn&#39;t the right way. It does work fine for collision between two other bitmaps though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (evantage)</author>
		<pubDate>Tue, 04 Feb 2014 03:04:51 +0000</pubDate>
	</item>
</rss>
