<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>scrolling camera along with player?</title>
		<link>http://www.allegro.cc/forums/view/609375</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 24 Jan 2012 11:22:07 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hey everyone,</p><p>not really sure how to make the screen move along with my player in a side-scroller. I searched it in this forum and found some references to a camera, but I am not sure how to implement this. </p><p>By the way I am using Mappy for my tiled background</p><p>Currently I am using this:</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">const</span> <span class="k1">int</span> WIDTH <span class="k3">=</span> <span class="n">800</span><span class="k2">;</span>
<span class="number">  2</span><span class="k1">const</span> <span class="k1">int</span> HEIGHT <span class="k3">=</span> <span class="n">600</span><span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>     <span class="c">//player.x is the center position of my rectangular player, and bx is the   bounding box</span>
<span class="number">  7</span>     player.x <span class="k3">+</span><span class="k3">=</span> keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">*</span> <span class="n">5</span><span class="k2">;</span>
<span class="number">  8</span>     player.x <span class="k3">-</span><span class="k3">=</span> keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">*</span> <span class="n">5</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>     <span class="k1">if</span> <span class="k2">(</span>player.x <span class="k3">+</span> player.bx <span class="k3">&gt;</span> WIDTH <span class="k3">-</span> <span class="n">250</span><span class="k2">)</span>
<span class="number"> 11</span>         xOff <span class="k3">+</span><span class="k3">=</span> player.x <span class="k3">+</span> player.bx <span class="k3">-</span> <span class="n">550</span><span class="k2">;</span>
<span class="number"> 12</span>     <span class="k1">if</span><span class="k2">(</span>xOff <span class="k3">&gt;</span> <span class="k2">(</span>mapwidth<span class="k3">*</span>mapblockwidth <span class="k3">-</span> WIDTH<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 13</span>        xOff <span class="k3">=</span> mapwidth<span class="k3">*</span>mapblockwidth <span class="k3">-</span> WIDTH<span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>     render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="k2">}</span>
<span class="number"> 18</span><span class="k1">if</span> <span class="k2">(</span>render <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 19</span><span class="k2">{</span>
<span class="number"> 20</span>     render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>     MapDrawBG<span class="k2">(</span>xOff, yOff, <span class="n">0</span>, <span class="n">0</span>, WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>     DrawPlayer<span class="k2">(</span>player<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>     <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>     <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span><span class="k2">}</span>
</div></div><p>

the problem here is that when my player passes that certain pixel on the right, the entire screen continuously shifts until it hits the end of the map. I wanted something similar to most platformers, where after a certain point on the screen the camera jumps that much distance and no more <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>Thanks everyone
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (allegronewb)</author>
		<pubDate>Tue, 24 Jan 2012 06:10:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Basic camera algorithm :
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> camerax <span class="k3">=</span> playerx <span class="k3">-</span> SCREEN_WIDTH<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="k1">int</span> cameray <span class="k3">=</span> playery <span class="k3">-</span> SCREEN_HEIGHT<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="k1">if</span> <span class="k2">(</span>camerax <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>camerax <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
<span class="k1">if</span> <span class="k2">(</span>camerax <span class="k3">&gt;</span><span class="k3">=</span> MAP_WIDTH <span class="k3">-</span> SCREEN_WIDTH<span class="k2">)</span> <span class="k2">{</span>camerax <span class="k3">=</span> MAP_WIDTH <span class="k3">-</span> SCREEN_WIDTH<span class="k2">;</span><span class="k2">}</span>
<span class="k1">if</span> <span class="k2">(</span>cameray <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>cameray <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
<span class="k1">if</span> <span class="k2">(</span>cameray <span class="k3">&gt;</span><span class="k3">=</span> MAP_HEIGHT <span class="k3">-</span> SCREEN_HEIGHT<span class="k2">)</span> <span class="k2">{</span>cameray <span class="k3">=</span> MAP_HEIGHT <span class="k3">-</span> SCREEN_HEIGHT<span class="k2">;</span><span class="k2">}</span>
</pre></div></div><p>

Then you render everything at (x - camerax , y - cameray).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 24 Jan 2012 06:14:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the help. Just a question though, you said to render at (x - camerax, y- cameray). What is x and y? I tried using player.x - camerax, and that crashed immediately</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">else</span> <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number">  2</span>    <span class="k2">{</span>
<span class="number">  3</span>      <span class="c">/*</span>
<span class="number">  4</span><span class="c">      xOff += keys[RIGHT] * 4;</span>
<span class="number">  5</span><span class="c">      xOff -= keys[LEFT] * 10;</span>
<span class="number">  6</span><span class="c">      yOff += keys[DOWN] * 10;</span>
<span class="number">  7</span><span class="c">      yOff -= keys[UP] * 10;</span>
<span class="number">  8</span><span class="c">      */</span>
<span class="number">  9</span>
<span class="number"> 10</span>      player.x <span class="k3">+</span><span class="k3">=</span> keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">*</span> <span class="n">5</span><span class="k2">;</span>
<span class="number"> 11</span>      player.x <span class="k3">-</span><span class="k3">=</span> keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">*</span> <span class="n">5</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>      camerax <span class="k3">=</span> player.x <span class="k3">-</span> WIDTH<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 14</span>      cameray <span class="k3">=</span> player.y <span class="k3">-</span> HEIGHT<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>      <span class="k1">if</span> <span class="k2">(</span>camerax <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>camerax <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 17</span>      <span class="k1">if</span> <span class="k2">(</span>camerax <span class="k3">&gt;</span><span class="k3">=</span> mapwidth<span class="k3">*</span>mapblockwidth <span class="k3">-</span> WIDTH<span class="k2">)</span> <span class="k2">{</span>camerax <span class="k3">=</span> mapwidth<span class="k3">*</span>mapblockwidth <span class="k3">-</span> WIDTH<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 18</span>      <span class="k1">if</span> <span class="k2">(</span>cameray <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>cameray <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 19</span>      <span class="k1">if</span> <span class="k2">(</span>cameray <span class="k3">&gt;</span><span class="k3">=</span> mapheight<span class="k3">*</span>mapblockheight <span class="k3">-</span> HEIGHT<span class="k2">)</span> <span class="k2">{</span>cameray <span class="k3">=</span> mapheight<span class="k3">*</span>mapblockheight <span class="k3">-</span> HEIGHT<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 20</span>
<span class="number"> 21</span>      <span class="c">/*</span>
<span class="number"> 22</span><span class="c">      if(xOff &lt; 0)</span>
<span class="number"> 23</span><span class="c">        xOff = 0;</span>
<span class="number"> 24</span><span class="c">      if(yOff &lt; 0)</span>
<span class="number"> 25</span><span class="c">        yOff = 0;</span>
<span class="number"> 26</span><span class="c">      if(xOff &gt; (mapwidth*mapblockwidth - WIDTH))</span>
<span class="number"> 27</span><span class="c">        xOff = mapwidth*mapblockwidth - WIDTH;</span>
<span class="number"> 28</span><span class="c">      if(yOff &gt; mapheight*mapblockheight - HEIGHT)</span>
<span class="number"> 29</span><span class="c">        yOff = mapheight*mapblockheight - HEIGHT;</span>
<span class="number"> 30</span><span class="c">        */</span>
<span class="number"> 31</span>
<span class="number"> 32</span>      CollideBottomTiles<span class="k2">(</span>player<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>
<span class="number"> 34</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 35</span>    <span class="k2">}</span>
<span class="number"> 36</span>
<span class="number"> 37</span>    <span class="k1">if</span><span class="k2">(</span>render <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 38</span>    <span class="k2">{</span>
<span class="number"> 39</span>      render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 40</span>      
<span class="number"> 41</span>      MapDrawBG<span class="k2">(</span>camerax,cameray, <span class="n">0</span>, <span class="n">0</span>, WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>      DrawPlayer<span class="k2">(</span>player<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>
<span class="number"> 44</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>    <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (allegronewb)</author>
		<pubDate>Tue, 24 Jan 2012 06:40:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Forgot to say you draw the world at (-camerax , -cameray).</p><p>As to why it crashes, I don&#39;t know. Use a debugger. Or show more code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 24 Jan 2012 06:45:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the help. Unfortunately I still can&#39;t get it to work <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /></p><p>I tried the (-camerax, -cameray), but my Player and the screen were moving incorrectly in the opposite directions. Your algorithm helped a ton, but my issue is speed I think. Whats happening is that my player moves to the right of the screen (and eventually off of it) much quicker than the screen gets to adjust to his place. </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">const</span> <span class="k1">int</span> WIDTH <span class="k3">=</span> <span class="n">800</span><span class="k2">;</span>
<span class="number">   2</span><span class="k1">const</span> <span class="k1">int</span> HEIGHT <span class="k3">=</span> <span class="n">600</span><span class="k2">;</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="k1">bool</span> keys<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">   5</span><span class="k1">enum</span> KEYS<span class="k2">{</span>UP, DOWN, LEFT, RIGHT<span class="k2">}</span><span class="k2">;</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="k1">struct</span> Player
<span class="number">   8</span><span class="k2">{</span>
<span class="number">   9</span>  <span class="k1">int</span> x<span class="k2">;</span>
<span class="number">  10</span>  <span class="k1">int</span> y<span class="k2">;</span>
<span class="number">  11</span>
<span class="number">  12</span>  <span class="k1">int</span> bx<span class="k2">;</span>
<span class="number">  13</span>  <span class="k1">int</span> by<span class="k2">;</span>
<span class="number">  14</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  15</span>
<span class="number">  16</span><span class="k1">void</span> InitPlayer<span class="k2">(</span>Player <span class="k3">&amp;</span>player, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> bx, <span class="k1">int</span> by<span class="k2">)</span><span class="k2">;</span>
<span class="number">  17</span><span class="k1">void</span> DrawPlayer<span class="k2">(</span>Player <span class="k3">&amp;</span>player<span class="k2">)</span><span class="k2">;</span>
<span class="number">  18</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  19</span><span class="k2">{</span>
<span class="number">  20</span>  <span class="c">//variables</span>
<span class="number">  21</span>  <span class="k1">bool</span> done <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  22</span>  <span class="k1">bool</span> render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>  
<span class="number">  23</span>
<span class="number">  24</span>  <span class="k1">int</span> xOff <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  25</span>  <span class="k1">int</span> yOff <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  26</span>
<span class="number">  27</span>  <span class="k1">int</span> camerax<span class="k2">;</span>
<span class="number">  28</span>  <span class="k1">int</span> cameray<span class="k2">;</span>
<span class="number">  29</span>
<span class="number">  30</span>  Player player<span class="k2">;</span>
<span class="number">  31</span>
<span class="number">  32</span>  InitPlayer<span class="k2">(</span>player, <span class="n">400</span>, <span class="n">300</span>, <span class="n">16</span>, <span class="n">16</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  33</span>
<span class="number">  34</span>
<span class="number">  35</span>  <span class="c">//allegro variable</span>
<span class="number">  36</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  37</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>event_queue <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  38</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer<span class="k2">;</span>
<span class="number">  39</span>  
<span class="number">  40</span>  <span class="c">//program init</span>
<span class="number">  41</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>                    <span class="c">//initialize Allegro</span>
<span class="number">  42</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  43</span>
<span class="number">  44</span>  display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>      <span class="c">//create our display object</span>
<span class="number">  45</span>
<span class="number">  46</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>                    <span class="c">//test display object</span>
<span class="number">  47</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  48</span>
<span class="number">  49</span>  <span class="c">//addon init</span>
<span class="number">  50</span>  <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>  <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>  <a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>  <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>
<span class="number">  56</span>  <span class="k1">if</span><span class="k2">(</span>MapLoad<span class="k2">(</span><span class="s">"map2.FMP"</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  57</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">5</span><span class="k2">;</span>
<span class="number">  58</span>  
<span class="number">  59</span>  event_queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  60</span>  timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  61</span>
<span class="number">  62</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  64</span>
<span class="number">  65</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>  <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span>
<span class="number">  67</span>  <span class="k2">{</span>
<span class="number">  68</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number">  69</span>    <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>
<span class="number">  71</span>    <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number">  72</span>    <span class="k2">{</span>
<span class="number">  73</span>      <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number">  74</span>      <span class="k2">{</span>
<span class="number">  75</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number">  76</span>        done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  77</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  78</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number">  79</span>        keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  80</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  81</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number">  82</span>        keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  83</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  84</span>      <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number">  85</span>        keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  86</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  87</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number">  88</span>        keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  89</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  90</span>      <span class="k2">}</span>
<span class="number">  91</span>    <span class="k2">}</span>
<span class="number">  92</span>    <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span>
<span class="number">  93</span>    <span class="k2">{</span>
<span class="number">  94</span>      <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number">  95</span>      <span class="k2">{</span>
<span class="number">  96</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number">  97</span>        done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  98</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  99</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 100</span>        keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 101</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 102</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 103</span>        keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 104</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 105</span>      <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 106</span>        keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 107</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 108</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 109</span>        keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 110</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 111</span>      <span class="k2">}</span>
<span class="number"> 112</span>    <span class="k2">}</span>
<span class="number"> 113</span>    <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 114</span>    <span class="k2">{</span>
<span class="number"> 115</span>      player.x <span class="k3">+</span><span class="k3">=</span> keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">*</span> <span class="n">5</span><span class="k2">;</span>
<span class="number"> 116</span>      player.x <span class="k3">-</span><span class="k3">=</span> keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">*</span> <span class="n">5</span><span class="k2">;</span>
<span class="number"> 117</span>
<span class="number"> 118</span>      camerax <span class="k3">=</span> player.x <span class="k3">-</span> WIDTH<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 119</span>      cameray <span class="k3">=</span> player.y <span class="k3">-</span> HEIGHT<span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 120</span>
<span class="number"> 121</span>      <span class="k1">if</span> <span class="k2">(</span>camerax <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>camerax <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 122</span>      <span class="k1">if</span> <span class="k2">(</span>camerax <span class="k3">&gt;</span><span class="k3">=</span> mapwidth<span class="k3">*</span>mapblockwidth <span class="k3">-</span> WIDTH<span class="k2">)</span> <span class="k2">{</span>camerax <span class="k3">=</span> mapwidth<span class="k3">*</span>mapblockwidth <span class="k3">-</span> WIDTH<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 123</span>      <span class="k1">if</span> <span class="k2">(</span>cameray <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>cameray <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 124</span>      <span class="k1">if</span> <span class="k2">(</span>cameray <span class="k3">&gt;</span><span class="k3">=</span> mapheight<span class="k3">*</span>mapblockheight <span class="k3">-</span> HEIGHT<span class="k2">)</span> <span class="k2">{</span>cameray <span class="k3">=</span> mapheight<span class="k3">*</span>mapblockheight <span class="k3">-</span> HEIGHT<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 125</span>
<span class="number"> 126</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 127</span>    <span class="k2">}</span>
<span class="number"> 128</span>
<span class="number"> 129</span>    <span class="k1">if</span><span class="k2">(</span>render <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 130</span>    <span class="k2">{</span>
<span class="number"> 131</span>      render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 132</span>      
<span class="number"> 133</span>      MapDrawBG<span class="k2">(</span><span class="k3">-</span>camerax,<span class="k3">-</span>cameray, <span class="n">0</span>, <span class="n">0</span>, WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</span>      DrawPlayer<span class="k2">(</span>player<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>
<span class="number"> 136</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 137</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 138</span>    <span class="k2">}</span>
<span class="number"> 139</span>  <span class="k2">}</span>
<span class="number"> 140</span>
<span class="number"> 141</span>  MapFreeMem<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</span>  <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span>  <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>            <span class="c">//destroy our display object</span>
<span class="number"> 144</span>
<span class="number"> 145</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 146</span><span class="k2">}</span>
<span class="number"> 147</span>
<span class="number"> 148</span><span class="k1">void</span> InitPlayer<span class="k2">(</span>Player <span class="k3">&amp;</span>player, <span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> bx, <span class="k1">int</span> by<span class="k2">)</span>
<span class="number"> 149</span><span class="k2">{</span>
<span class="number"> 150</span>  player.x <span class="k3">=</span> x<span class="k2">;</span>
<span class="number"> 151</span>  player.y <span class="k3">=</span> y<span class="k2">;</span>
<span class="number"> 152</span>  player.bx <span class="k3">=</span> bx<span class="k2">;</span>
<span class="number"> 153</span>  player.by <span class="k3">=</span> by<span class="k2">;</span>
<span class="number"> 154</span><span class="k2">}</span>
<span class="number"> 155</span><span class="k1">void</span> DrawPlayer<span class="k2">(</span>Player <span class="k3">&amp;</span>player<span class="k2">)</span>
<span class="number"> 156</span><span class="k2">{</span>
<span class="number"> 157</span>  <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>player.x <span class="k3">-</span> player.bx, player.y <span class="k3">-</span> player.by, player.x <span class="k3">+</span> player.bx, player.y <span class="k3">+</span> player.by,
<span class="number"> 158</span>    <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 159</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (allegronewb)</author>
		<pubDate>Tue, 24 Jan 2012 06:59:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Edgar: don&#39;t teach him to abuse C&#39;s whitespace rules like that. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /><br />The block that follows an if clause should go on the next line. Not the same one.</p><p>Bad:<br /><span class="source-code"><span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>foo <span class="k3">|</span><span class="k3">|</span> bar<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> frotz<span class="k2">)</span> fnord <span class="k3">=</span> baz<span class="k2">;</span> <span class="c">// Where does the if statement end?</span></span></p><p>Good:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>foo <span class="k3">|</span><span class="k3">|</span> bar<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> frotz<span class="k2">)</span> <span class="k2">{</span> <span class="c">// Much more readable!</span>
    fnord <span class="k3">=</span> baz<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Tue, 24 Jan 2012 07:09:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>allegronewb, You should look into using the <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a></span>s as a camera.  Something as simple as this will work nicely:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a> camera_transform<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_STATE"><span class="a">ALLEGRO_STATE</span></a> previous_state<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_store_state"><span class="a">al_store_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>previous_state, ALLEGRO_STATE_TRANSFORM<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_build_transform"><span class="a">al_build_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera_transform, <span class="k3">-</span>camera_x<span class="k3">+</span><a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span>, <span class="k3">-</span>camera_y<span class="k3">+</span><a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a><span class="k3">/</span><span class="n">2</span>, <span class="n">1</span>, <span class="n">1</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>camera_transform<span class="k2">)</span><span class="k2">;</span>

<span class="c">// draw all your world's stuff here, in regular world coordinates</span>
   <span class="c">// ...</span>

<a href="http://www.allegro.cc/manual/al_restore_state"><span class="a">al_restore_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>previous_state<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

If you then set the camera_x and camera_y to your player&#39;s coordinates, it will follow him.  (I didn&#39;t test the above code, but it should work).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 24 Jan 2012 07:18:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609375/945363#target">gnolam</a> said:</div><div class="quote"><p> if ((foo || bar) &amp;&amp; frotz) fnord = baz; // Where does the if statement end?</p></div></div><p>I don&#39;t have trouble reading it, but if you&#39;re stepping through the code with a debugger you can&#39;t see intermediate results.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 24 Jan 2012 07:24:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I feel like an idiot here but I&#39;m still not getting it working. I feel like everything is working at its barebones, but my Player still moves too fast for the Screen. Player ends up going off the screen by the time the screen catches up.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (allegronewb)</author>
		<pubDate>Tue, 24 Jan 2012 09:41:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Could you attach the all of your code (and the files)? <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 24 Jan 2012 09:55:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Of course! Thanks. Also, I want to thank everyone else for contributing, seriously. I used to be a math tutor and would often get frustrated if someone didn&#39;t understand a topic quick enough (Didn&#39;t say I was a good tutor haha) but thanks for bearing with me.</p><p>Everything is inside the main.cpp, but to compile you would also need the the .c and the .h files I have attached. Also the image file I have attached from Mappy.</p><p>Thanks again
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (allegronewb)</author>
		<pubDate>Tue, 24 Jan 2012 10:02:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The easiest solution is to render your player (DrawPlayer()) relative to the camera:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> DrawPlayer<span class="k2">(</span>Player <span class="k3">&amp;</span>player, <span class="k1">float</span> camerax, <span class="k1">float</span> cameray<span class="k2">)</span>
<span class="k2">{</span>
  <a href="http://www.allegro.cc/manual/al_draw_filled_rectangle"><span class="a">al_draw_filled_rectangle</span></a><span class="k2">(</span>player.x <span class="k3">-</span> player.bx <span class="k3">-</span> camerax, player.y <span class="k3">-</span> player.by <span class="k3">-</span> cameray,
    player.x <span class="k3">+</span> player.bx <span class="k3">-</span> camerax, player.y <span class="k3">+</span> player.by <span class="k3">-</span> cameray,
    <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

A more complex solution would involve an <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_TRANSFORM"><span class="a">ALLEGRO_TRANSFORM</span></a></span> as a camera but things could get a little strange since you&#39;re using the MapDrawBG for offsets and clipping, so I would just do the above.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 24 Jan 2012 11:04:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Wow...that&#39;s perfect. Just put it into the code and it works like a charm. Definitely going to study it a little bit more to see what I was doing it wrong. Thanks a lot, everyone
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (allegronewb)</author>
		<pubDate>Tue, 24 Jan 2012 11:10:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/609375/945363#target">gnolam</a> said:</div><div class="quote"><p>
Edgar: don&#39;t teach him to abuse C&#39;s whitespace rules like that. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div></div><p>
Meh. I was being lazy and using forum type. And yeah, it makes it a <span class="cuss"><span>bitch</span></span> to debug.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 24 Jan 2012 11:22:07 +0000</pubDate>
	</item>
</rss>
