<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>[A5] Drawing a sprite to a display</title>
		<link>http://www.allegro.cc/forums/view/607037</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 21 Apr 2011 10:31:01 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just as a little learning project, I want to make an allegro program that just has a sprite on the display, and it walks left when press left, right when I press right etc.   Basically all I have done so far is make a pong game which just used primitive bitmaps, rather than loading an image.  So basically I just need to know how sprites work.</p><p>I need to know where does the sprite come from?  Do I take a sprite sheet from google and load a section of that image file into the program?</p><p>When the sprite moves, how exactly do I put in the animation?  Do I time it so that while a keyboard event is occurring, the program cycles through a few different images on a sprite sheet?</p><p>And if there is anything else I should know then I would appreciate any advice you all could give me <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Havacore)</author>
		<pubDate>Sun, 17 Apr 2011 11:41:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s a very broad description of how I do it :
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> Animation <span class="k2">{</span>
<span class="number">  2</span><span class="k1">private</span> <span class="k2">:</span>
<span class="number">  3</span>   <a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a><span class="k3">*</span><span class="k3">*</span> frames<span class="k2">;</span>
<span class="number">  4</span>   <span class="k1">double</span> duration<span class="k2">;</span>
<span class="number">  5</span>   <span class="k1">double</span> current_time<span class="k2">;</span>
<span class="number">  6</span>   <span class="k1">int</span> num_frames<span class="k2">;</span>
<span class="number">  7</span>   <span class="k1">int</span> frame_number<span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number"> 10</span>   <span class="k1">void</span> SetFrameTime<span class="k2">(</span><span class="k1">double</span> tsec<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>   <span class="k1">void</span> AdvanceFrameTime<span class="k2">(</span><span class="k1">double</span> tsec<span class="k2">)</span> <span class="k2">{</span>SetFrameTime<span class="k2">(</span>current_time <span class="k3">+</span> tsec<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 12</span>   <span class="k1">void</span> Draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a><span class="k3">*</span> bmp , <span class="k1">int</span> x , <span class="k1">int</span> y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="k1">class</span> StateAnimation <span class="k2">{</span>
<span class="number"> 16</span><span class="k1">private</span> <span class="k2">:</span>
<span class="number"> 17</span>   map<span class="k3">&lt;</span>string , Animation<span class="k3">*</span><span class="k3">&gt;</span>
<span class="number"> 18</span>   Animation<span class="k3">*</span> active_animation<span class="k2">;</span>
<span class="number"> 19</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number"> 20</span>   <span class="k1">void</span> SetState<span class="k2">(</span>string state<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>   <span class="k1">void</span> AdvanceFrameTime<span class="k2">(</span><span class="k1">double</span> tsec<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 22</span>      <span class="k1">if</span> <span class="k2">(</span>active_animation<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 23</span>         active_animation-&gt;AdvanceFrameTime<span class="k2">(</span>tsec<span class="k2">)</span><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="k1">void</span> Draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a><span class="k3">*</span> bmp , <span class="k1">int</span> x , <span class="k1">int</span> y<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 27</span>      <span class="k1">if</span> <span class="k2">(</span>active_animation<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 28</span>         active_animation-&gt;Draw<span class="k2">(</span>bmp , x , y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>      <span class="k2">}</span>
<span class="number"> 30</span>   <span class="k2">}</span>
<span class="number"> 31</span><span class="c">/*...*/</span>
<span class="number"> 32</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 33</span>
<span class="number"> 34</span><span class="k1">class</span> Character <span class="k2">{</span>
<span class="number"> 35</span><span class="k1">private</span> <span class="k2">:</span>
<span class="number"> 36</span>   Animation move_left<span class="k2">;</span>
<span class="number"> 37</span>   Animation move_right<span class="k2">;</span>
<span class="number"> 38</span>   Animation crouch<span class="k2">;</span>
<span class="number"> 39</span>   Animation stand_left<span class="k2">;</span>
<span class="number"> 40</span>   Animation stand_right<span class="k2">;</span>
<span class="number"> 41</span>   Animation jump_left<span class="k2">;</span>
<span class="number"> 42</span>   Animation jump_right<span class="k2">;</span>
<span class="number"> 43</span>   StateAnimation anim_state<span class="k2">;</span>
<span class="number"> 44</span><span class="c">/*...*/</span>
<span class="number"> 45</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

For an animation, you need to know how long it displays for, how many frames there are, how much time has passed so far, and whether it loops or is static. Then you also need to know the current state of the animation, and how to set that state based on what your character is doing.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 17 Apr 2011 12:26:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>oh nice!  Good thing my class just covered how to do OOP!</p><p>But on a simpler scale.  I don&#39;t even know how to draw a sprite to the display.  I&#39;ve looked through the allegro manual and I can&#39;t find any functions that take in an image file or anything to draw to the display.  All I can think of is creating a bitmap, and filling it with a colour <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Havacore)</author>
		<pubDate>Sun, 17 Apr 2011 21:44:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can go and grab a sprite sheet off google, or make one yourself that looks like this:<br /><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/0/0/002b0fcf888b85527227a8b84a300731.png" alt="603942" width="160" height="256" /></p><p>This is the code I use to get a single tile off this sheet, and scroll through them over time.</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="number">  2</span>CPlayer::CPlayer<span class="k2">(</span><span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>  bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"player.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>  <a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>bmp, <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">255</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>
<span class="number">  6</span>
<span class="number">  7</span>  animationWidth <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">/</span><span class="n">32</span><span class="k2">;</span> <span class="c">//the tiles are 32/32</span>
<span class="number">  8</span>  animationHeight <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">/</span><span class="n">32</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>
<span class="number"> 11</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> h <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> h<span class="k3">&lt;</span> animationHeight<span class="k2">;</span> h<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 12</span>  <span class="k2">{</span>
<span class="number"> 13</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> w <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> w<span class="k3">&lt;</span>animationWidth<span class="k2">;</span> w<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 14</span>    <span class="k2">{</span>
<span class="number"> 15</span>      pallet.push_back<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>bmp, w<span class="k3">*</span>TILE_SIZE, h<span class="k3">*</span>TILE_SIZE, TILE_SIZE, TILE_SIZE<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    <span class="k2">}</span>
<span class="number"> 17</span>  <span class="k2">}</span>
<span class="number"> 18</span>
<span class="number"> 19</span>  bmp <span class="k3">=</span> pallet<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k2">}</span>
<span class="number"> 21</span>
<span class="number"> 22</span>
<span class="number"> 23</span><span class="k1">void</span> CPlayer::animate<span class="k2">(</span><span class="k1">int</span> state, <span class="k1">int</span> cycleTime<span class="k2">)</span>
<span class="number"> 24</span><span class="k2">{</span>
<span class="number"> 25</span>
<span class="number"> 26</span>  animationCount<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 27</span>  <span class="k1">if</span> <span class="k2">(</span>animationCount <span class="k3">&gt;</span><span class="k3">=</span> cycleTime<span class="k2">)</span>
<span class="number"> 28</span>  <span class="k2">{</span>
<span class="number"> 29</span>    animationCount <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span>  <span class="k2">}</span>
<span class="number"> 32</span>  animationState <span class="k3">=</span> state<span class="k2">;</span>
<span class="number"> 33</span>
<span class="number"> 34</span>  <span class="k1">if</span> <span class="k2">(</span>state <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> state <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">3</span><span class="k2">)</span>
<span class="number"> 35</span>  <span class="k2">{</span>
<span class="number"> 36</span>    direction <span class="k3">=</span> state<span class="k2">;</span>
<span class="number"> 37</span>  <span class="k2">}</span>
<span class="number"> 38</span>
<span class="number"> 39</span>  bmp <span class="k3">=</span> pallet<span class="k2">[</span>state<span class="k3">*</span>animationWidth <span class="k3">+</span> <span class="k2">(</span>animationCount<span class="k3">/</span><span class="k2">(</span>cycleTime<span class="k3">/</span><span class="n">4</span><span class="k2">)</span><span class="k2">)</span><span class="k3">+</span><span class="n">1</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 40</span>
<span class="number"> 41</span><span class="k2">}</span>
</div></div><p>

To actually draw this I call the players&#39; parent draw function.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> CVisibleTile::draw<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">if</span><span class="k2">(</span>x<span class="k3">+</span> TILE_SIZE <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> x <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">&amp;</span><span class="k3">&amp;</span> y <span class="k3">+</span> TILE_SIZE <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> y<span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a><span class="k2">)</span>
  <span class="k2">{</span>
    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bmp, x, y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
  <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>


Hope that helps. There&#39;s a good tutorial on the wiki for the basics of displaying bitmaps as well. <a href="http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Input">http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Input</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jason perkins)</author>
		<pubDate>Sun, 17 Apr 2011 22:00:04 +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/607037/913522#target">Havacore</a> said:</div><div class="quote"><p>
But on a simpler scale.  I don&#39;t even know how to draw a sprite to the display.  I&#39;ve looked through the allegro manual and I can&#39;t find any functions that take in an image file or anything to draw to the display.
</p></div></div><p>
Are you using Allegro 4 or Allegro 5?</p><p>Allegro 4 :<br /><span class="source-code"><a href="http://www.allegro.cc/manual/load_bitmap"><span class="a">load_bitmap</span></a></span><br /><span class="source-code"><a href="http://www.allegro.cc/manual/draw_sprite"><span class="a">draw_sprite</span></a></span></p><p>Allegro 5 :<br /><span class="source-code"><a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a></span><br /><span class="source-code"><a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a></span><br /><span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 18 Apr 2011 01:45:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m using allegro 5.</p><p>what is the pallet object you have at line 15 jason?  I hope you don&#39;t mind, but I&#39;m just copying down that code so that I can mess around with it later to get a better understanding of what&#39;s going on.</p><p>Just to clarify, what does al_convert_mask_to_alpha do?  I noticed that the rgb code in your function is magenta, so does that just make it so that magenta is transparent?</p><p>And I have read all the tutorials so far.  And I&#39;ve implemented them into a little pong game (except font, which I can&#39;t get to work so far).  The bitmap tutorial unfortunately just explains how to make a solid colored square, not an image.  Or in this case, and image out of a bigger image like a sprite sheet.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Havacore)</author>
		<pubDate>Mon, 18 Apr 2011 03:58:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607037/913572#target">Havacore</a> said:</div><div class="quote"><p>so does that just make it so that magenta is transparent?</p></div></div><p>

Yes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SpectreNectar)</author>
		<pubDate>Mon, 18 Apr 2011 07:53:56 +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/607037/913572#target">Havacore</a> said:</div><div class="quote"><p>
The bitmap tutorial unfortunately just explains how to make a solid colored square, not an image.  Or in this case, and image out of a bigger image like a sprite sheet.
</p></div></div><p>
Use <span class="source-code"><a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a></span> to load your spritesheet, then create an array of ALLEGRO_BITMAP* and fill it in with <span class="source-code"><a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a></span> and <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_bitmap_region"><span class="a">al_draw_bitmap_region</span></a></span> or use <span class="source-code"><a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a></span> on your spritesheet. Then use <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a></span> to draw your images.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 18 Apr 2011 08:39:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think I need to add a second example to that bitmap tutorial that uses the image addon.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 18 Apr 2011 13:22:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Can we copy bitmap to new bitmap without display ?<br />I find rotate_sprite(pframe-&gt;frame, vbitmap, pframe-&gt;iwidth / 2, pframe-&gt;iheight / 2, fangle).<br />How to use it? Which <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />.h will be include ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (leixiong)</author>
		<pubDate>Mon, 18 Apr 2011 18:42:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I guess you&#39;ve figured out from the posts above that there really isn&#39;t any such thing as a sprite.  In the olden days, the Commodore 64 had sprites. A sprite is just a bitmap that appears to animate simply because you are replacing it with another bitmap, i.e. a sprite is a class you create to manage, control and show the graphics in order <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Forget about palettes. They are only used in 8 bit graphics and A5 doesn&#39;t support them.</p><p>Regarding al_convert_mask_to_alpha(): A5 uses the alpha channel to support transparency. A4 didn&#39;t and instead usually relied on &#39;magic pink&#39;, i.e. 255,0,255 magenta. So, al_convert_mask_to_alpha will look at your bitmap and any magenta pixel will be converted to transparency.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Mon, 18 Apr 2011 18:50:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok so first step, I just want to cut a section (the top left most) of the sprite sheet and put it on the display, just for starters.  Now I&#39;ve got a program that compiles, but it has a segmentation fault in there.  Also I&#39;m wondering if I&#39;m doing this right.  I&#39;m just making a class for the sprite, and using a drawing method with al_draw_bitmap_region.</p><p>(The rest of the code should be good, Its just copied from my pong game for the eventual keyboard input I will want to put in later)</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">   4</span>
<span class="number">   5</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="c">/*</span>
<span class="number">   8</span><span class="c">CONSTANTS</span>
<span class="number">   9</span><span class="c">*/</span>
<span class="number">  10</span>
<span class="number">  11</span><span class="k1">const</span> <span class="k1">int</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">=</span> <span class="n">640</span><span class="k2">;</span>
<span class="number">  12</span><span class="k1">const</span> <span class="k1">int</span> <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a> <span class="k3">=</span> <span class="n">480</span><span class="k2">;</span>
<span class="number">  13</span><span class="k1">const</span> <span class="k1">float</span> FPS <span class="k3">=</span> <span class="n">60</span><span class="k2">;</span>
<span class="number">  14</span>
<span class="number">  15</span><span class="k1">enum</span> MYKEYS <span class="k2">{</span>
<span class="number">  16</span>    KEY_UP, KEY_DOWN, KEY_W, KEY_S
<span class="number">  17</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  18</span>
<span class="number">  19</span><span class="c">/*</span>
<span class="number">  20</span><span class="c">FUNCTIONS</span>
<span class="number">  21</span><span class="c">*/</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="c">/*</span>
<span class="number">  24</span><span class="c">OBJECTS</span>
<span class="number">  25</span><span class="c">*/</span>
<span class="number">  26</span>
<span class="number">  27</span><span class="k1">class</span> player
<span class="number">  28</span><span class="k2">{</span>
<span class="number">  29</span>  
<span class="number">  30</span>    private:
<span class="number">  31</span>  
<span class="number">  32</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bmp<span class="k2">;</span>
<span class="number">  33</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>animation<span class="k2">;</span>
<span class="number">  34</span>  <span class="k1">int</span> animationWidth<span class="k2">;</span>
<span class="number">  35</span>  <span class="k1">int</span> animationHeight<span class="k2">;</span>
<span class="number">  36</span>  
<span class="number">  37</span>  
<span class="number">  38</span>    public:
<span class="number">  39</span>  
<span class="number">  40</span>  <span class="c">//Construtor</span>
<span class="number">  41</span>  player<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  42</span>  <span class="c">//Draws the sprite from areas x and y from the sprite sheet</span>
<span class="number">  43</span>  <span class="k1">void</span> draw<span class="k2">(</span><span class="k1">float</span> x, <span class="k1">float</span> y<span class="k2">)</span><span class="k2">;</span>
<span class="number">  44</span>  
<span class="number">  45</span>  
<span class="number">  46</span>    
<span class="number">  47</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  48</span>
<span class="number">  49</span>  player::player<span class="k2">(</span><span class="k2">)</span>
<span class="number">  50</span>  <span class="k2">{</span>
<span class="number">  51</span>      <span class="c">//loads the entire spritesheet</span>
<span class="number">  52</span>      bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"player.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>      <span class="c">//converts the sprite sheet's magenta background to transparent pixels</span>
<span class="number">  54</span>      <a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>bmp, <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">255</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>
<span class="number">  55</span>      
<span class="number">  56</span>      <span class="c">//each animation in the sprite sheet is 32X32 pixels</span>
<span class="number">  57</span>      animationWidth <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">/</span><span class="n">32</span><span class="k2">;</span>
<span class="number">  58</span>      animationHeight <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">/</span><span class="n">32</span><span class="k2">;</span>
<span class="number">  59</span>      
<span class="number">  60</span>     
<span class="number">  61</span>  <span class="k2">}</span>
<span class="number">  62</span>  
<span class="number">  63</span>  <span class="k1">void</span> player::draw<span class="k2">(</span><span class="k1">float</span> x, <span class="k1">float</span> y<span class="k2">)</span>
<span class="number">  64</span>  <span class="k2">{</span>
<span class="number">  65</span>      <span class="c">//draw section of sprite sheet</span>
<span class="number">  66</span>      <span class="c">//target bitmap, region x, region y, width, height, destination x, destination y, flag(0)</span>
<span class="number">  67</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap_region"><span class="a">al_draw_bitmap_region</span></a><span class="k2">(</span>bmp, <span class="n">0</span>, <span class="n">0</span>, animationWidth, animationHeight, x, y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>  <span class="k2">}</span>
<span class="number">  69</span>
<span class="number">  70</span><span class="c">/*</span>
<span class="number">  71</span><span class="c">MAIN</span>
<span class="number">  72</span><span class="c">*/</span>
<span class="number">  73</span>
<span class="number">  74</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span>
<span class="number">  75</span><span class="k2">{</span>
<span class="number">  76</span>    <span class="c">/*</span>
<span class="number">  77</span><span class="c">    ALLEGRO DECLARATIONS</span>
<span class="number">  78</span><span class="c">    */</span>
<span class="number">  79</span>    
<span class="number">  80</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">  81</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">  82</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  83</span>    
<span class="number">  84</span>
<span class="number">  85</span>    <span class="c">/*</span>
<span class="number">  86</span><span class="c">    VARIABLES</span>
<span class="number">  87</span><span class="c">    */</span>
<span class="number">  88</span>
<span class="number">  89</span>  <span class="k1">bool</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span><span class="n">4</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">  90</span>  <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  91</span>  <span class="k1">bool</span> doexit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  92</span>  
<span class="number">  93</span>  <span class="k1">float</span> sprite_x <span class="k3">=</span> <span class="k2">(</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="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>  <span class="k1">float</span> sprite_y <span class="k3">=</span> <span class="k2">(</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="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>  
<span class="number">  96</span>  player sprite<span class="k2">;</span>
<span class="number">  97</span>
<span class="number">  98</span>    <span class="c">/*</span>
<span class="number">  99</span><span class="c">    CONFIGURATION</span>
<span class="number"> 100</span><span class="c">    */</span>
<span class="number"> 101</span>    
<span class="number"> 102</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="k2">{</span>
<span class="number"> 103</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to initialized allegro\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 104</span>  <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 105</span>    <span class="k2">}</span>
<span class="number"> 106</span>    
<span class="number"> 107</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</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="k2">{</span>
<span class="number"> 108</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to install keyboard\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>  <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 110</span>    <span class="k2">}</span>
<span class="number"> 111</span>
<span class="number"> 112</span>  <span class="c">//initialize display (w, h)</span>
<span class="number"> 113</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><a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 114</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 115</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to create display\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>  <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 117</span>    <span class="k2">}</span>
<span class="number"> 118</span>    
<span class="number"> 119</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>FPS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 120</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>timer<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 121</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to create timer\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 122</span>  <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 123</span>    <span class="k2">}</span>
<span class="number"> 124</span>
<span class="number"> 125</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 126</span>
<span class="number"> 127</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"> 128</span>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>event_queue<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 129</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"failed to create event queue\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 130</span>  <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 131</span>    <span class="k2">}</span>
<span class="number"> 132</span>    
<span class="number"> 133</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_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</span>    
<span class="number"> 135</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"> 136</span>    
<span class="number"> 137</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"> 138</span>    
<span class="number"> 139</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"> 140</span>
<span class="number"> 141</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"> 142</span>    
<span class="number"> 143</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"> 144</span>
<span class="number"> 145</span>    <span class="c">/*</span>
<span class="number"> 146</span><span class="c">    MAIN LOOP</span>
<span class="number"> 147</span><span class="c">    */</span>
<span class="number"> 148</span>    
<span class="number"> 149</span>    <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>doexit<span class="k2">)</span>
<span class="number"> 150</span>  <span class="k2">{</span>
<span class="number"> 151</span>
<span class="number"> 152</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"> 153</span>
<span class="number"> 154</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"> 155</span>
<span class="number"> 156</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"> 157</span>    <span class="k2">{</span>
<span class="number"> 158</span>
<span class="number"> 159</span>
<span class="number"> 160</span>      redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 161</span>    <span class="k2">}</span>
<span class="number"> 162</span>
<span class="number"> 163</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_DISPLAY_CLOSE<span class="k2">)</span>
<span class="number"> 164</span>    <span class="k2">{</span>
<span class="number"> 165</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 166</span>    <span class="k2">}</span>
<span class="number"> 167</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"> 168</span>    <span class="k2">{</span>
<span class="number"> 169</span>        <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span> 
<span class="number"> 170</span>        <span class="k2">{</span>
<span class="number"> 171</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 172</span>          doexit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 173</span>          <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 174</span>        <span class="k2">}</span>
<span class="number"> 175</span>    <span class="k2">}</span>
<span class="number"> 176</span>
<span class="number"> 177</span>    <span class="k1">if</span><span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 178</span>    <span class="k2">{</span>
<span class="number"> 179</span>      redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 180</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"> 181</span>
<span class="number"> 182</span>      <span class="c">//redraw bitmaps</span>
<span class="number"> 183</span>      
<span class="number"> 184</span>
<span class="number"> 185</span>      <span class="c">//draw player</span>
<span class="number"> 186</span>      sprite.draw<span class="k2">(</span>sprite_x, sprite_y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 187</span>      
<span class="number"> 188</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"> 189</span>
<span class="number"> 190</span>    <span class="k2">}</span>
<span class="number"> 191</span>
<span class="number"> 192</span>
<span class="number"> 193</span>  <span class="k2">}</span>
<span class="number"> 194</span>  
<span class="number"> 195</span>  <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 196</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="number"> 197</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"> 198</span>  <span class="c">//destroy bitmaps</span>
<span class="number"> 199</span>
<span class="number"> 200</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 201</span>  <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Havacore)</author>
		<pubDate>Tue, 19 Apr 2011 00:19:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve never used al_draw_bitmap_region(), but that looks a little off. because your changing units from pixels to pictures with this line:</p><div class="source-code snippet"><div class="inner"><pre>animationWidth <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">/</span><span class="n">32</span><span class="k2">;</span>
...
</pre></div></div><p>

 To get just the top left image with al_create_sub_bitmap(). you&#39;d do this: </p><div class="source-code snippet"><div class="inner"><pre>
bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"player.png"</span><span class="k2">)</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> top_left_image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>bmp, <span class="n">0</span>, <span class="n">0</span>, <span class="n">32</span>, <span class="n">32</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

and draw with al_draw_bitmap(top_left_image, x, y, 0)</p><p>It just makes more practical sense to create an entire array at once though. so if you have a 4x4 sheet and 32x32 tiles...</p><div class="source-code snippet"><div class="inner"><pre>
bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"player.png"</span><span class="k2">)</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bmp_array<span class="k2">[</span><span class="n">4</span><span class="k2">]</span><span class="k2">[</span><span class="n">4</span><span class="k2">]</span><span class="k2">;</span>

<span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> <span class="n">4</span><span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> <span class="n">4</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
  <span class="k2">{</span>
    bmp_array<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>bmp, <span class="n">32</span><span class="k3">*</span>x, <span class="n">32</span><span class="k3">*</span>y, <span class="n">32</span>, <span class="n">32</span><span class="k2">)</span><span class="k2">;</span>
  <span class="k2">}</span>
<span class="k2">}</span>

sprite.bmp <span class="k3">=</span> bmp_array<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">;</span>
</pre></div></div><p>



Also instead of creating the variables sprite_x, and sprite_y, you should just make them private members of your player class, and write public functions to modify the values. Same goes for the bitmap so you can switch which element in the bitmap array is getting drawn.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (jason perkins)</author>
		<pubDate>Tue, 19 Apr 2011 01:28:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>@Havacore<br />Your program is crashing because you are calling al_load_bitmap before you have initialized allegro and you forgot to initialize the image addon. You declare &#39;player sprite&#39; (which calls player::player(), which calls al_load_bitmap) before you call al_init().
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 19 Apr 2011 05:19:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok I did it!  I now have a program that draws a piece of the sprite sheet to the display! Now for animation, which is going to be quite the mountain for me to conquer <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>@Edgar<br />I&#39;ve been looking at the code you posted in the first reply.  It all looks good an makes sense to me now, I just don&#39;t quite know how to keep track of time in a program.  (whether in an allegro program or in a regular C++ program).  The only thing I can think of is using my FPS constant with the allegro timer, making the animation state change every 15 frames or so.  Would that be how you would go about tackling that problem?</p><p>Also that map&lt;string , Animation*&gt; in the animationState class, what is that?</p><p>Thanks for all the help so far btw everyone, this is awesome!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Havacore)</author>
		<pubDate>Tue, 19 Apr 2011 10:54:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Without giving you full code since you are doing it for a course of some sort. You can use al_create_timer( ALLEGRO_BPS_TO_SECS( 60 ) ); &quot;60&quot; being the FPS and use the Allegro Event system ALLEGRO_EVENT_TIMER.</p><p>Hope this helps you.</p><p>Edit:
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607037/913722#target">Havacore</a> said:</div><div class="quote"><p>
Also that map&lt;string , Animation*&gt; in the animationState class, what is that?
</p></div></div><p>

It&#39;s an array. Similar to std::vector and array[10]
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Desmond Taylor)</author>
		<pubDate>Tue, 19 Apr 2011 12:00:40 +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/607037/913723#target">Desmond Taylor</a> said:</div><div class="quote"><p>
Without giving you full code since you are doing it for a course of some sort
</p></div></div><p>

Just to clarify, this isn&#39;t for a class, allegro programming is something I&#39;m just learning on my own time.  The course I mentioned earlier is just a regular computer science course.</p><p>On the other hand though, that is useful. I&#39;ll have to play around with events some more
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Havacore)</author>
		<pubDate>Tue, 19 Apr 2011 21:39:41 +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/607037/913722#target">Havacore</a> said:</div><div class="quote"><p>
I just don&#39;t quite know how to keep track of time in a program.  (whether in an allegro program or in a regular C++ program).  The only thing I can think of is using my FPS constant with the allegro timer, making the animation state change every 15 frames or so.  Would that be how you would go about tackling that problem?
</p></div></div><p>

Use an ALLEGRO_TIMER, and set the the number of seconds between ticks using your FPS variable. You get the number of seconds per tick by taking the reciprocal of your FPS. Then for each timer event you receive, you call Animation::AdvanceFrameTime(seconds_per_tick).
</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">float</span> FPS <span class="k3">=</span> <span class="n">60</span>.<span class="n">0</span><span class="k2">;</span><span class="c">// or whatever your monitors refresh rate is</span>
<span class="number">  2</span><span class="k1">const</span> <span class="k1">float</span> SPT <span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span><span class="k3">/</span>FPS<span class="k2">;</span><span class="c">// seconds per tick</span>
<span class="number">  3</span><a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</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>SPT<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="c">//... Create display ...</span>
<span class="number">  6</span>
<span class="number">  7</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">  8</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">  9</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="c">// start the timer just after a vsync (flip) so we always get the most amount of time for logic and drawing</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="c">//... Logic ...</span>
<span class="number"> 12</span><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>   <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</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"> 15</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"> 16</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="k2">{</span>
<span class="number"> 17</span>         animation.AdvanceFrameTime<span class="k2">(</span>SPT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>         redraw <span class="k3">=</span> <span class="k1">true</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><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">break</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 21</span>   <span class="k2">}</span>
<span class="number"> 22</span>   <span class="k1">if</span> <span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 23</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"> 24</span>      animation.Display<span class="k2">(</span>x,y<span class="k2">)</span><span class="k2">;</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>   <span class="k2">}</span>
<span class="number"> 27</span><span class="k2">}</span>
<span class="number"> 28</span><span class="c">// ... Clean up ...</span>
<span class="number"> 29</span><span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
</div></div><p>

Here is a working Allegro 4 based example of animation :<br /><a href="http://www.allegro.cc/forums/thread/606852/910395#target">My post complete with animation example</a></p><p>If you download the zip file from that post you can view the source code I used for it and run the example I provided. The important functions from Animation.cpp are AnimationBase::AdvanceFrameTime, and AnimationBase::SetFrameTime, which I posted on the page I linked to. If you have any questions, feel free to ask. If I have time in the next few days, I may make a short version that works with A5.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607037/913723#target">Desmond Taylor</a> said:</div><div class="quote"><p>
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607037/913722#target">Havacore</a> said:</div><div class="quote"><p>
Also that map&lt;string , Animation*&gt; in the animationState class, what is that?
</p></div></div><p>
It&#39;s an array. Similar to std::vector and array[10]
</p></div></div><p>
No, it&#39;s not an array. At best, it is like a sorted linked list. I gave William Labbett a short explanation of how to use the std::map class here :<br /><a href="http://www.allegro.cc/forums/thread/607022/913369#target">std::map explanation, with link to SGI STL documentation</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 20 Apr 2011 09:27:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok I&#39;m trying to use the code you put in the first response with the animation, stateAnimation and character classes.  I&#39;m still trying to wrap my head around the map thing, but I&#39;m wondering if I can get away without using it.  I worked on it a bit today but this is about as far as I got</p><p>sprite.h:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#ifndef _SPRITE_H_</span>
<span class="number">  2</span><span class="p">#define _SPRITE_H_</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  5</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  6</span><span class="p">#include &lt;cstring&gt;</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="k1">class</span> animation
<span class="number">  9</span><span class="k2">{</span>
<span class="number"> 10</span>    
<span class="number"> 11</span>    private:
<span class="number"> 12</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bmp<span class="k2">;</span>
<span class="number"> 13</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bmp_array<span class="k2">[</span><span class="n">8</span><span class="k2">]</span><span class="k2">[</span><span class="n">5</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 14</span>  <span class="k1">double</span> duration<span class="k2">;</span>
<span class="number"> 15</span>  <span class="k1">double</span> current_time<span class="k2">;</span>
<span class="number"> 16</span>  <span class="k1">int</span> num_frames<span class="k2">;</span>
<span class="number"> 17</span>  <span class="k1">int</span> frame_number<span class="k2">;</span>
<span class="number"> 18</span>  
<span class="number"> 19</span>  
<span class="number"> 20</span>    public:
<span class="number"> 21</span>  animation<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>  <span class="k1">void</span> setFrameTime<span class="k2">(</span><span class="k1">double</span> tsec<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>  <span class="k1">void</span> advanceFrameTime<span class="k2">(</span><span class="k1">double</span> tsec<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>  <span class="k1">void</span> draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a><span class="k3">*</span> bmp, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>  
<span class="number"> 26</span><span class="k2">}</span>
<span class="number"> 27</span>
<span class="number"> 28</span><span class="k1">class</span> stateAnimation
<span class="number"> 29</span><span class="k2">{</span>
<span class="number"> 30</span>    
<span class="number"> 31</span>    private:
<span class="number"> 32</span>  <span class="c">//map?</span>
<span class="number"> 33</span>  Animation<span class="k3">*</span> active_animation<span class="k2">;</span>
<span class="number"> 34</span>  
<span class="number"> 35</span>    public:
<span class="number"> 36</span>  <span class="k1">void</span> setState<span class="k2">(</span>string state<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>  <span class="k1">void</span> advanceFrameTime<span class="k2">(</span><span class="k1">double</span> tsec<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>  <span class="k1">void</span> draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a><span class="k3">*</span> bmp, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span><span class="k2">}</span>
<span class="number"> 40</span>
<span class="number"> 41</span><span class="k1">class</span> player
<span class="number"> 42</span><span class="k2">{</span>
<span class="number"> 43</span>  
<span class="number"> 44</span>    private:
<span class="number"> 45</span>  
<span class="number"> 46</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>current_animation<span class="k2">;</span>
<span class="number"> 47</span>  <span class="k1">int</span> animationWidth<span class="k2">;</span>
<span class="number"> 48</span>  <span class="k1">int</span> animationHeight<span class="k2">;</span>
<span class="number"> 49</span>  animation move_left<span class="k2">;</span>
<span class="number"> 50</span>  animation move_right<span class="k2">;</span>
<span class="number"> 51</span>  stateAnimation anim_state<span class="k2">;</span>
<span class="number"> 52</span>  
<span class="number"> 53</span>    public:
<span class="number"> 54</span>  
<span class="number"> 55</span>  <span class="c">//Construtor</span>
<span class="number"> 56</span>  player<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>  
<span class="number"> 58</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 59</span>
<span class="number"> 60</span><span class="p">#endif</span>
</div></div><p>

sprite.cc:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include "sprite.h"</span>
<span class="number">  2</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  4</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="c">/********************/</span>
<span class="number">  7</span><span class="c">/* animation class  */</span>
<span class="number">  8</span><span class="c">/********************/</span>
<span class="number">  9</span>
<span class="number"> 10</span>animation::animation<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>     <span class="c">//loads the entire spritesheet</span>
<span class="number"> 13</span>    bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"player.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <span class="c">//converts the sprite sheet's magenta background to transparent pixels</span>
<span class="number"> 15</span>    <a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>bmp, <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">255</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>
<span class="number"> 16</span>    
<span class="number"> 17</span>    
<span class="number"> 18</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> <span class="n">8</span><span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 19</span>    <span class="k2">{</span>
<span class="number"> 20</span>  <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> <span class="n">5</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 21</span>  <span class="k2">{</span>
<span class="number"> 22</span>      bmp_array<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>bmp, <span class="n">32</span><span class="k3">*</span>x, <span class="n">32</span><span class="k3">*</span>y, <span class="n">32</span>, <span class="n">32</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>  <span class="k2">}</span>
<span class="number"> 24</span>    <span class="k2">}</span>     
<span class="number"> 25</span>    
<span class="number"> 26</span>    num_frames <span class="k3">=</span> <span class="n">40</span><span class="k2">;</span>
<span class="number"> 27</span>    current_time <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 28</span><span class="k2">}</span>
<span class="number"> 29</span>
<span class="number"> 30</span><span class="c">//sets the time for a frame</span>
<span class="number"> 31</span><span class="k1">void</span> animation::setFrameTime<span class="k2">(</span><span class="k1">double</span> tsec<span class="k2">)</span>
<span class="number"> 32</span><span class="k2">{</span>
<span class="number"> 33</span>    duration <span class="k3">=</span> tsec<span class="k2">;</span>
<span class="number"> 34</span><span class="k2">}</span>
<span class="number"> 35</span>
<span class="number"> 36</span><span class="c">//advances the frame time</span>
<span class="number"> 37</span><span class="k1">void</span> animation::advanceFrameTime<span class="k2">(</span><span class="k1">double</span> tsec<span class="k2">)</span>
<span class="number"> 38</span><span class="k2">{</span>
<span class="number"> 39</span>    setFrameTime<span class="k2">(</span>current_time <span class="k3">+</span> tsec<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span><span class="k2">}</span>
<span class="number"> 41</span>
<span class="number"> 42</span><span class="k1">void</span> animation::draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a><span class="k3">*</span> bmp, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span>
<span class="number"> 43</span><span class="k2">{</span>
<span class="number"> 44</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bmp, x, y, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span><span class="k2">}</span>
<span class="number"> 46</span>
<span class="number"> 47</span><span class="c">/**************************/</span>
<span class="number"> 48</span><span class="c">/* animation state class  */</span>
<span class="number"> 49</span><span class="c">/**************************/</span>
<span class="number"> 50</span>
<span class="number"> 51</span><span class="k1">void</span> stateAnimation::setState<span class="k2">(</span>string state<span class="k2">)</span>
<span class="number"> 52</span><span class="k2">{</span>
<span class="number"> 53</span>    
<span class="number"> 54</span><span class="k2">}</span>
<span class="number"> 55</span>
<span class="number"> 56</span><span class="k1">void</span> stateAnimation::advanceFrameTime<span class="k2">(</span><span class="k1">double</span> tsec<span class="k2">)</span>
<span class="number"> 57</span><span class="k2">{</span>
<span class="number"> 58</span>    
<span class="number"> 59</span><span class="k2">}</span>
<span class="number"> 60</span>
<span class="number"> 61</span><span class="k1">void</span> stateAnimation::draw<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a><span class="k3">*</span> bmp, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span>
<span class="number"> 62</span><span class="k2">{</span>
<span class="number"> 63</span>    
<span class="number"> 64</span><span class="k2">}</span>
<span class="number"> 65</span>
<span class="number"> 66</span><span class="c">/*****************/</span>
<span class="number"> 67</span><span class="c">/* Player class  */</span>
<span class="number"> 68</span><span class="c">/*****************/</span>
<span class="number"> 69</span>
<span class="number"> 70</span>
<span class="number"> 71</span><span class="c">//Constructor</span>
<span class="number"> 72</span>player::player<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 73</span><span class="k2">{</span>
<span class="number"> 74</span>   
<span class="number"> 75</span><span class="k2">}</span>
</div></div><p>

I changes some stuff from the original post, and I haven&#39;t filled in the player or the animation state class yet.  I haven&#39;t figured out what exactly the setFrameTime and advanceFrameTime functions should do.  One second I&#39;m thinking that setFrameTime will set the duration, but then I think why wouldn&#39;t you just do that in the constructor...  Maybe it&#39;s just because I need to step away from this for a second..
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Havacore)</author>
		<pubDate>Thu, 21 Apr 2011 03:29:25 +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/607037/913942#target">Havacore</a> said:</div><div class="quote"><p>
I haven&#39;t figured out what exactly the setFrameTime and advanceFrameTime functions should do.
</p></div></div><p>
SetFrameTime should take a time value and turn it into a frame number. AdvanceFrameTime should take the current value, add the delta time to it, and then use that value in a call to SetFrameTime.</p><p>I&#39;ll go over the basics of a forward playing looped animation :
</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="number">  2</span><span class="k1">class</span> Animation <span class="k2">{</span>
<span class="number">  3</span><span class="k1">protected</span> <span class="k2">:</span>
<span class="number">  4</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span><span class="k3">*</span> frames<span class="k2">;</span>
<span class="number">  5</span>   <span class="k1">double</span> duration<span class="k2">;</span>
<span class="number">  6</span>   <span class="k1">double</span> frames_per_sec<span class="k2">;</span>
<span class="number">  7</span>   <span class="k1">double</span> frametime<span class="k2">;</span>
<span class="number">  8</span>   <span class="k1">int</span> num_frames<span class="k2">;</span>
<span class="number">  9</span>   <span class="k1">int</span> frame_num<span class="k2">;</span>
<span class="number"> 10</span>   
<span class="number"> 11</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number"> 12</span>   Animation<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span> 
<span class="number"> 13</span>      frames<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,
<span class="number"> 14</span>      duration<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span><span class="k2">)</span>,
<span class="number"> 15</span>      frames_per_sec<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span><span class="k2">)</span>,
<span class="number"> 16</span>      frametime<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span><span class="k2">)</span>,
<span class="number"> 17</span>      num_frames<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,
<span class="number"> 18</span>      frame_num<span class="k2">(</span><span class="n">0</span><span class="k2">)</span>
<span class="number"> 19</span>   <span class="k2">{</span><span class="k2">}</span>
<span class="number"> 20</span>   ~Animation<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>Free<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 21</span>
<span class="number"> 22</span>   <span class="k1">void</span> Free<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 23</span>      <span class="k1">if</span> <span class="k2">(</span>frames<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 24</span>         <span class="k1">delete</span> <span class="k2">[</span><span class="k2">]</span> frames<span class="k2">;</span>
<span class="number"> 25</span>         frames <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 26</span>      <span class="k2">}</span>
<span class="number"> 27</span>   <span class="k2">}</span>
<span class="number"> 28</span>
<span class="number"> 29</span>   <span class="k1">void</span> Setup<span class="k2">(</span><span class="k1">double</span> play_duration , <span class="k1">int</span> number_of_frames<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 30</span>      Free<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>number_of_frames <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>play_duration <span class="k3">&gt;</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>      duration <span class="k3">=</span> play_duration<span class="k2">;</span>
<span class="number"> 34</span>      num_frames <span class="k3">=</span> number_of_frames<span class="k2">;</span>
<span class="number"> 35</span>      frames <span class="k3">=</span> <span class="k1">new</span> <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span><span class="k2">[</span>num_frames<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 36</span>      frames_per_sec <span class="k3">=</span> <span class="k2">(</span><span class="k1">double</span><span class="k2">)</span>num_frames <span class="k3">/</span> duration<span class="k2">;</span>
<span class="number"> 37</span>      SetFrameTime<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>   <span class="k2">}</span>
<span class="number"> 39</span>   <span class="k1">void</span> AdvanceFrameTime<span class="k2">(</span><span class="k1">double</span> delta_time<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 40</span>      SetFrameTime<span class="k2">(</span>frametime <span class="k3">+</span> delta_time<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>   <span class="k2">}</span>
<span class="number"> 42</span>   <span class="k1">void</span> SetFrameTime<span class="k2">(</span><span class="k1">double</span> new_frame_time<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 43</span>      <span class="k1">while</span><span class="k2">(</span>new_frame_time <span class="k3">&lt;</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>new_frame_time <span class="k3">+</span><span class="k3">=</span> duration<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 44</span>      <span class="k1">while</span><span class="k2">(</span>new_frame_time <span class="k3">&gt;</span><span class="k3">=</span> duration<span class="k2">)</span> <span class="k2">{</span>new_frame_time <span class="k3">-</span><span class="k3">=</span> duration<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 45</span>      frametime <span class="k3">=</span> new_frame_time<span class="k2">;</span>
<span class="number"> 46</span>      frame_num <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span>frametime<span class="k3">*</span>frames_per_sec<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>   <span class="k2">}</span>
<span class="number"> 48</span>   <span class="k1">void</span> SetBitmap<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bmp, <span class="k1">int</span> frame_number<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 49</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>frames<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 50</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span><span class="k2">(</span>frame_number <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>frame_number <span class="k3">&lt;</span> num_frames<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>      frames<span class="k2">[</span>frame_number<span class="k2">]</span> <span class="k3">=</span> bmp<span class="k2">;</span>
<span class="number"> 52</span>   <span class="k2">}</span>
<span class="number"> 53</span>   <span class="k1">void</span> Display<span class="k2">(</span><span class="k1">int</span> x , <span class="k1">int</span> y<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 54</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>frames<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>frames<span class="k2">[</span>frame_num<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 56</span>      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>frames<span class="k2">[</span>frame_num<span class="k2">]</span> , <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>x , <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>y , <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>   <span class="k2">}</span>
<span class="number"> 58</span>
<span class="number"> 59</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

And that&#39;s it. It gets slightly more complicated if you want more features, but it&#39;s a good place to start. Use it like 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">double</span> duration <span class="k3">=</span> <span class="n">10</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  2</span><span class="k1">int</span> number_of_frames <span class="k3">=</span> <span class="n">40</span><span class="k2">;</span>
<span class="number">  3</span>Animation anime<span class="k2">;</span>
<span class="number">  4</span>anime.Setup<span class="k2">(</span>duration , number_of_frames<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"player.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span><span class="c">//converts the sprite sheet's magenta background to transparent pixels al_convert_mask_to_alpha(bmp, (al_map_rgb(255, 0, 255)));</span>
<span class="number">  8</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  9</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> bmp_array<span class="k2">[</span><span class="n">40</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 10</span><span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> <span class="n">8</span><span class="k2">;</span> x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 11</span>   <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span> <span class="n">5</span><span class="k2">;</span> y<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 12</span>      bmp_array<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_sub_bitmap"><span class="a">al_create_sub_bitmap</span></a><span class="k2">(</span>bmp, <span class="n">32</span><span class="k3">*</span>x, <span class="n">32</span><span class="k3">*</span>y, <span class="n">32</span>, <span class="n">32</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>      anime.SetBitmap<span class="k2">(</span>bmp_array<span class="k2">[</span>x<span class="k2">]</span><span class="k2">[</span>y<span class="k2">]</span> , i<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>      <span class="k3">+</span><span class="k3">+</span>i<span class="k2">;</span>
<span class="number"> 15</span>   <span class="k2">}</span>
<span class="number"> 16</span><span class="k2">}</span>
<span class="number"> 17</span>
<span class="number"> 18</span><span class="c">// Event loop</span>
<span class="number"> 19</span>   <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 20</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"> 21</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"> 22</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="k2">{</span>
<span class="number"> 23</span>         anime.AdvanceFrameTime<span class="k2">(</span>SECONDS_PER_TICK<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>         redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 25</span>      <span class="k2">}</span>
<span class="number"> 26</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">break</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 27</span>   <span class="k2">}</span>
<span class="number"> 28</span>   <span class="k1">if</span> <span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 29</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"> 30</span>      anime.Draw<span class="k2">(</span><span class="n">400</span> <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">/</span><span class="n">2</span> , <span class="n">300</span> <span class="k3">-</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</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"> 32</span>   <span class="k2">}</span>
<span class="number"> 33</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 21 Apr 2011 10:31:01 +0000</pubDate>
	</item>
</rss>
