<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Using a Class for a Sprite Handler</title>
		<link>http://www.allegro.cc/forums/view/586262</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 09 Jul 2006 09:34:21 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So the notorious book that I&#39;ve been reading for working with Allegro presents its sprite handler as a struct. Since C++ seems to be more in line with what&#39;s being used in the &quot;industry&quot; nowadays, I wanted to construct a class for my sprite handler. I&#39;ve run into some problems though; the main one being that when I attempt to draw_sprite() to make sure it&#39;s being loaded, I get the following compile error:</p><p>base operand of `-&gt;&#39; has non-pointer type `Sprite&#39; </p><p>Here&#39;s the code in my program:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;string&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;iostream&gt;</span></td></tr><tr><td class="number">3</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="k1">class</span> Sprite</td></tr><tr><td class="number">8</td><td><span class="k2">{</span></td></tr><tr><td class="number">9</td><td>public:</td></tr><tr><td class="number">10</td><td>    Sprite<span class="k2">(</span><span class="k1">char</span> bmp_name<span class="k2">[</span><span class="n">10</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    ~Sprite<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>    </td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td>    string bmp_name<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> sprite_img<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    <span class="k1">int</span> x, y<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    <span class="k1">int</span> width, height<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>    <span class="k1">int</span> xspeed, yspeed<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    <span class="k1">int</span> xcount, ycount<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>    <span class="k1">int</span> xdelay, ydelay<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>    <span class="k1">int</span> curframe, maxframe<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>    <span class="k1">int</span> framecount, framedelay, animdir<span class="k2">;</span></td></tr><tr><td class="number">23</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td>Sprite::Sprite<span class="k2">(</span><span class="k1">char</span> bmp_name<span class="k2">[</span><span class="n">10</span><span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">26</td><td><span class="k2">{</span></td></tr><tr><td class="number">27</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Constructor Called"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>    sprite_img <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span>bmp_name, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td><span class="k2">}</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>Sprite::~Sprite<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">32</td><td><span class="k2">{</span></td></tr><tr><td class="number">33</td><td><span class="c">//    allegro_message("Destructor Called");</span></td></tr><tr><td class="number">34</td><td>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>sprite_img<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td><span class="k2">}</span></td></tr><tr><td class="number">36</td><td>&#160;</td></tr><tr><td class="number">37</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">38</td><td><span class="k2">{</span></td></tr><tr><td class="number">39</td><td>    <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>    <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">16</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>    <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, <span class="n">640</span>, <span class="n">480</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>    </td></tr><tr><td class="number">44</td><td>    Sprite foo<span class="k2">(</span><span class="s">"tank.bmp"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>&#160;</td></tr><tr><td class="number">46</td><td>    <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, foo-&gt;sprite_img, <span class="n">200</span>, <span class="n">200</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>    </td></tr><tr><td class="number">48</td><td>    <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>    </td></tr><tr><td class="number">50</td><td>    <a href="http://www.allegro.cc/manual/allegro_exit" target="_blank"><span class="a">allegro_exit</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td><span class="k2">}</span></td></tr><tr><td class="number">53</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

Can someone help me find the problem? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (David_at_wedu)</author>
		<pubDate>Tue, 04 Jul 2006 11:46:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Change <span class="source-code">Sprite foo<span class="k2">(</span><span class="s">"tank.bmp"</span><span class="k2">)</span><span class="k2">;</span></span> to <span class="source-code">Sprite <span class="k3">*</span>foo <span class="k3">=</span> <span class="k1">new</span> Sprite<span class="k2">(</span><span class="s">"tank.bmp"</span><span class="k2">)</span><span class="k2">;</span></span>, remove allegro_exit (you don&#39;t need it), and add <span class="source-code"><span class="k1">delete</span> foo<span class="k2">;</span></span> before returning from main.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Tue, 04 Jul 2006 11:53:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks, Kitty Cat. Figured it was something simple. Always is. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (David_at_wedu)</author>
		<pubDate>Tue, 04 Jul 2006 12:13:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Actually, he could have replaced the -&gt; with a period, like
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, foo.sprite_img, <span class="n">200</span>, <span class="n">200</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Allthough the new/delete is to prefer and should be a habit.<br />It is okay to declare/create a class like he did in the first place, but it will only be available in the scope of that function.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ixilom)</author>
		<pubDate>Tue, 04 Jul 2006 15:38:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Actually, he could have replaced the -&gt; with a period
</p></div></div><p>
He <i>could</i>, but placing objects on the stack like that is considered bad form. And later on if he makes it a global, he shouldn&#39;t construct it before he&#39;s in a graphics mode so he&#39;d need to wait to create it anyway.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Tue, 04 Jul 2006 16:36:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
He could, but placing objects on the stack like that is considered bad form. And later on if he makes it a global, he shouldn&#39;t construct it before he&#39;s in a graphics mode so he&#39;d need to wait to create it anyway.
</p></div></div><p>
I know, I was just saying he could with the code provided <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ixilom)</author>
		<pubDate>Tue, 04 Jul 2006 18:01:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Appreciate all the responses guys!</p><p>I&#39;ve actually advanced my code a little bit, but have now hit another wall. As you saw in my previous code, I was using a class as a sprite-handler. Once Kitty Cat helped me iron out that bug, it worked like a charm, and I even updated my code to the point of being able to move the sprite around, complete with direction changes. But now I want to animate it, and I&#39;m kind of stuck.</p><p>With the code I have, I&#39;m calling load_bitmap() each time the class is instantiated, but on that same token, every additional sprite is another object. So I&#39;m kind of stuck as to how to modify my class to do what I need. </p><p>I thought about perhaps storing multiple frames per instance, maybe in some sort of container like a vector, but I&#39;m just not sure exactly <b>how</b> to do it. Can any of you guys help me out on this? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /></p><p>(again, I apologize for my blatant newbie-ness!)</p><p>Edit: I actually did some tinkering and figured out how to store my multiple frames in a vector. It probably sound corny to the vets here, but I&#39;m quite proud of my accomplishment! <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Now I have a new problem... Animation... Given my code, does anyone have a suggestion as to how I could animate my sprite? I tried to do it with a for loop and a rest() call, but when I apply it to all directions, it slows the sprite&#39;s movement to a crawl and doesn&#39;t seem to animate properly.</p><p>Here&#39;s my code:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;vector&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="p">#define WHITE makecol(255,255,255)</span></td></tr><tr><td class="number">7</td><td><span class="p">#define RED makecol(255,0,0)</span></td></tr><tr><td class="number">8</td><td><span class="p">#define BLACK makecol(0,0,0)</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td><span class="p">#define DISPMODE GFX_AUTODETECT_WINDOWED</span></td></tr><tr><td class="number">11</td><td><span class="p">#define DISPDEPTH 32</span></td></tr><tr><td class="number">12</td><td><span class="p">#define DISPW 600</span></td></tr><tr><td class="number">13</td><td><span class="p">#define DISPH 900</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td><span class="k1">class</span> Sprite</td></tr><tr><td class="number">16</td><td><span class="k2">{</span></td></tr><tr><td class="number">17</td><td>public:</td></tr><tr><td class="number">18</td><td>    Sprite<span class="k2">(</span><span class="k1">char</span> bmp_name<span class="k2">[</span><span class="n">30</span><span class="k2">]</span>, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    ~Sprite<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>    <span class="k1">void</span> AddFrame<span class="k2">(</span><span class="k1">char</span> bmp_name<span class="k2">[</span><span class="n">30</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>    <span class="k1">char</span> bmp_name<span class="k2">[</span><span class="n">30</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> sprite_img<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>    <span class="k1">int</span> x, y<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>    <span class="k1">int</span> width, height<span class="k2">;</span></td></tr><tr><td class="number">26</td><td>    <span class="k1">int</span> xspeed, yspeed<span class="k2">;</span></td></tr><tr><td class="number">27</td><td>    <span class="k1">int</span> xcount, ycount<span class="k2">;</span></td></tr><tr><td class="number">28</td><td>    <span class="k1">int</span> xdelay, ydelay<span class="k2">;</span></td></tr><tr><td class="number">29</td><td>    <span class="k1">int</span> curframe, maxframe<span class="k2">;</span></td></tr><tr><td class="number">30</td><td>    <span class="k1">int</span> framecount, framedelay, animdir<span class="k2">;</span></td></tr><tr><td class="number">31</td><td>        vector<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span><span class="k3">&gt;</span> frames<span class="k2">;</span></td></tr><tr><td class="number">32</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td>Sprite::Sprite<span class="k2">(</span><span class="k1">char</span> bmp_name<span class="k2">[</span><span class="n">30</span><span class="k2">]</span>, <span class="k1">int</span> sx, <span class="k1">int</span> sy<span class="k2">)</span></td></tr><tr><td class="number">35</td><td><span class="k2">{</span></td></tr><tr><td class="number">36</td><td>        AddFrame<span class="k2">(</span>bmp_name<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>    x <span class="k3">=</span> sx<span class="k2">;</span></td></tr><tr><td class="number">38</td><td>    y <span class="k3">=</span> sy<span class="k2">;</span></td></tr><tr><td class="number">39</td><td>    xspeed <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>    yspeed <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    xcount <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>    ycount <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>    xdelay <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>    ydelay <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>    curframe <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>    maxframe <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>    framecount <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>    framedelay <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>    animdir <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td><span class="k2">}</span></td></tr><tr><td class="number">51</td><td>&#160;</td></tr><tr><td class="number">52</td><td>    <span class="k1">void</span> Sprite::AddFrame<span class="k2">(</span><span class="k1">char</span> bmp_name<span class="k2">[</span><span class="n">30</span><span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">53</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">54</td><td>&#160;</td></tr><tr><td class="number">55</td><td>        <span class="k1">int</span> s<span class="k2">;</span></td></tr><tr><td class="number">56</td><td>        sprite_img <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span>bmp_name, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">57</td><td>        <span class="k1">if</span> <span class="k2">(</span>sprite_img <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">58</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">59</td><td>            <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Error loading BITMAP"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>            <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">61</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">62</td><td>        frames.push_back<span class="k2">(</span>sprite_img<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td>        s <span class="k3">=</span> frames.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">64</td><td>        width <span class="k3">=</span> sprite_img-&gt;w<span class="k2">;</span></td></tr><tr><td class="number">65</td><td>        height <span class="k3">=</span> sprite_img-&gt;h<span class="k2">;</span></td></tr><tr><td class="number">66</td><td>&#160;</td></tr><tr><td class="number">67</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">68</td><td>&#160;</td></tr><tr><td class="number">69</td><td>Sprite::~Sprite<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">70</td><td><span class="k2">{</span></td></tr><tr><td class="number">71</td><td>    <span class="k1">int</span> s, x<span class="k2">;</span></td></tr><tr><td class="number">72</td><td>    s <span class="k3">=</span> frames.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">73</td><td>    <span class="k1">for</span> <span class="k2">(</span>x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>x<span class="k3">&lt;</span>s<span class="k2">;</span>x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">74</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">75</td><td>        <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>frames<span class="k2">[</span>x<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">76</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">77</td><td><span class="k2">}</span></td></tr><tr><td class="number">78</td><td>&#160;</td></tr><tr><td class="number">79</td><td><span class="k1">void</span> initialize<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">80</td><td><span class="k2">{</span></td></tr><tr><td class="number">81</td><td>    <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">82</td><td>    <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">83</td><td>    <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">84</td><td>    <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>DISPDEPTH<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">85</td><td>    <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>DISPMODE, DISPW, DISPH, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">86</td><td><span class="k2">}</span></td></tr><tr><td class="number">87</td><td>&#160;</td></tr><tr><td class="number">88</td><td><span class="k1">void</span> updatesprite<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> buffer, Sprite<span class="k3">*</span> spr, <span class="k1">int</span> dir<span class="k2">)</span></td></tr><tr><td class="number">89</td><td><span class="k2">{</span></td></tr><tr><td class="number">90</td><td>    <span class="k1">float</span> angle<span class="k2">;</span></td></tr><tr><td class="number">91</td><td>    <span class="k1">int</span> x<span class="k2">;</span></td></tr><tr><td class="number">92</td><td>    <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="s">"My Project (ESC to quit)"</span>, <span class="n">0</span>, <span class="n">0</span>, WHITE, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">93</td><td>    <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">0</span>, <span class="n">10</span>, WHITE, <span class="k3">-</span><span class="n">1</span>, <span class="s">"sprite1 x, y: %i,%i"</span>, spr-&gt;x, spr-&gt;y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">94</td><td>    <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">0</span>, <span class="n">20</span>, WHITE, <span class="k3">-</span><span class="n">1</span>, <span class="s">"sprite1 width,height: %i,%i"</span>, spr-&gt;width, spr-&gt;height<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">95</td><td>    <span class="k1">switch</span> <span class="k2">(</span>dir<span class="k2">)</span></td></tr><tr><td class="number">96</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">97</td><td>        <span class="k1">case</span> <span class="n">0</span> <span class="k2">:</span></td></tr><tr><td class="number">98</td><td>            <a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>buffer, spr-&gt;frames<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, spr-&gt;x, spr-&gt;y, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="k3">-</span><span class="n">64</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">99</td><td>            <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">600</span>, <span class="n">900</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">100</td><td>            <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">101</td><td>            <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">102</td><td>        <span class="k1">case</span> <span class="n">1</span> <span class="k2">:</span></td></tr><tr><td class="number">103</td><td>            <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>buffer, spr-&gt;frames<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, spr-&gt;x, spr-&gt;y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">104</td><td>            <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">600</span>, <span class="n">900</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">105</td><td>            <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">106</td><td>            <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">107</td><td>        <span class="k1">case</span> <span class="n">2</span> <span class="k2">:</span></td></tr><tr><td class="number">108</td><td>            <a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>buffer, spr-&gt;frames<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, spr-&gt;x, spr-&gt;y, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">64</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">109</td><td>            <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">600</span>, <span class="n">900</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">110</td><td>            <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">111</td><td>            <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">112</td><td>        <span class="k1">case</span> <span class="n">3</span> <span class="k2">:</span></td></tr><tr><td class="number">113</td><td>            <a href="http://www.allegro.cc/manual/draw_sprite_h_flip" target="_blank"><span class="a">draw_sprite_h_flip</span></a><span class="k2">(</span>buffer, spr-&gt;frames<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>, spr-&gt;x, spr-&gt;y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">114</td><td>            <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">600</span>, <span class="n">900</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">115</td><td>            <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">116</td><td>            <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">117</td><td>        <span class="k1">default</span> <span class="k2">:</span></td></tr><tr><td class="number">118</td><td><span class="c">//            for (x=0;x&lt;spr-&gt;frames.size();x++)</span></td></tr><tr><td class="number">119</td><td><span class="c">//            {</span></td></tr><tr><td class="number">120</td><td>                <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>buffer, spr-&gt;frames<span class="k2">[</span>x<span class="k2">]</span>, <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span><span class="k3">-</span>spr-&gt;width<span class="k3">/</span><span class="n">2</span><span class="k2">)</span>, <span class="n">600</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">121</td><td>                <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">600</span>, <span class="n">900</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">122</td><td><span class="c">//                rest(50);</span></td></tr><tr><td class="number">123</td><td><span class="c">//            }</span></td></tr><tr><td class="number">124</td><td>            <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">125</td><td>            spr-&gt;x <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span><span class="k3">-</span>spr-&gt;width<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">126</td><td>            spr-&gt;y <span class="k3">=</span> <span class="n">600</span><span class="k2">;</span></td></tr><tr><td class="number">127</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">128</td><td>    <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">10</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">129</td><td><span class="k2">}</span></td></tr><tr><td class="number">130</td><td>&#160;</td></tr><tr><td class="number">131</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">132</td><td><span class="k2">{</span></td></tr><tr><td class="number">133</td><td>    initialize<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">134</td><td>    <span class="k1">int</span> dir<span class="k2">;</span></td></tr><tr><td class="number">135</td><td>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">600</span>, <span class="n">900</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">136</td><td>&#160;</td></tr><tr><td class="number">137</td><td>    Sprite<span class="k3">*</span> sprite1 <span class="k3">=</span> <span class="k1">new</span> Sprite<span class="k2">(</span><span class="s">"sprites_pacman1.bmp"</span>, <span class="n">75</span>, <span class="n">75</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">138</td><td>    sprite1-&gt;AddFrame<span class="k2">(</span><span class="s">"sprites_pacman2.bmp"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">139</td><td>    sprite1-&gt;AddFrame<span class="k2">(</span><span class="s">"sprites_pacman3.bmp"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">140</td><td>    sprite1-&gt;AddFrame<span class="k2">(</span><span class="s">"sprites_pacman4.bmp"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">141</td><td>&#160;</td></tr><tr><td class="number">142</td><td>    <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">143</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">144</td><td>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">145</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">146</td><td>            dir <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span></td></tr><tr><td class="number">147</td><td>            sprite1-&gt;x <span class="k3">-</span><span class="k3">=</span> sprite1-&gt;xspeed<span class="k2">;</span></td></tr><tr><td class="number">148</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">149</td><td>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">150</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">151</td><td>            dir <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">152</td><td>            sprite1-&gt;x <span class="k3">+</span><span class="k3">=</span> sprite1-&gt;xspeed<span class="k2">;</span></td></tr><tr><td class="number">153</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">154</td><td>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">155</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">156</td><td>            dir <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">157</td><td>            sprite1-&gt;y <span class="k3">-</span><span class="k3">=</span> sprite1-&gt;yspeed<span class="k2">;</span></td></tr><tr><td class="number">158</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">159</td><td>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">160</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">161</td><td>            dir <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">162</td><td>            sprite1-&gt;y <span class="k3">+</span><span class="k3">=</span> sprite1-&gt;yspeed<span class="k2">;</span></td></tr><tr><td class="number">163</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">164</td><td>&#160;</td></tr><tr><td class="number">165</td><td>        <span class="k1">if</span> <span class="k2">(</span>sprite1-&gt;y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">166</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">167</td><td>            sprite1-&gt;y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">168</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">169</td><td>        <span class="k1">if</span> <span class="k2">(</span>sprite1-&gt;y <span class="k3">&gt;</span> SCREEN_H-sprite1-&gt;width<span class="k2">)</span></td></tr><tr><td class="number">170</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">171</td><td>            sprite1-&gt;y <span class="k3">=</span> SCREEN_H-sprite1-&gt;width<span class="k2">;</span></td></tr><tr><td class="number">172</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">173</td><td>        <span class="k1">if</span> <span class="k2">(</span>sprite1-&gt;x <span class="k3">&gt;</span> SCREEN_W-sprite1-&gt;width<span class="k2">)</span></td></tr><tr><td class="number">174</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">175</td><td>            sprite1-&gt;x <span class="k3">=</span> SCREEN_W-sprite1-&gt;width<span class="k2">;</span></td></tr><tr><td class="number">176</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">177</td><td>        <span class="k1">if</span> <span class="k2">(</span>sprite1-&gt;x  <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">178</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">179</td><td>            sprite1-&gt;x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">180</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">181</td><td>        updatesprite<span class="k2">(</span>buffer, sprite1, dir<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">182</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">183</td><td>    <span class="k1">delete</span> sprite1<span class="k2">;</span></td></tr><tr><td class="number">184</td><td>&#160;</td></tr><tr><td class="number">185</td><td>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">186</td><td><span class="k2">}</span></td></tr><tr><td class="number">187</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (David_at_wedu)</author>
		<pubDate>Wed, 05 Jul 2006 16:24:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You basically have two choices, each has its own merits and drawbacks. You can either use multiple images, blitting the appropriate one at the appropriate time, or you can gather them all together into a single sheet, and blit the portion of the image that contains the correct frame.</p><p>Regardless of which one you choose, you need a more sophisticated object, one that defines a number of frames that your game can pick from. If you&#39;re like me and prefer a data-driven design, you can store all that information in a separate file and build a loader into your sprite class; that&#39;s a lot more flexible, and allows a game designer (if you have one) to create sprites without your intervention. However, if you&#39;re all alone and embedding the data into your code doesn&#39;t bother you, continue doing what you&#39;re doing, except load up several images into a single sprite - perhaps with a variable argument list:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">class</span> Sprite</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>public:</td></tr><tr><td class="number">4</td><td>  Sprite<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>spriteFile<span class="k2">)</span></td></tr><tr><td class="number">5</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">6</td><td>    <span class="c">// read spec from sprite file and load indicated images</span></td></tr><tr><td class="number">7</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>  <span class="k3">-</span>or-</td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>  Sprite<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>imageFile, ...<span class="k2">)</span></td></tr><tr><td class="number">12</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">13</td><td>    <span class="c">// read arg list, load named images</span></td></tr><tr><td class="number">14</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>  <span class="k1">void</span> drawFrame<span class="k2">(</span><span class="k1">int</span> frame, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span></td></tr><tr><td class="number">17</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">18</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>frame <span class="k3">&lt;</span> nImages<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, img<span class="k2">[</span>frame<span class="k2">]</span>, x, y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>private:</td></tr><tr><td class="number">23</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span><span class="k3">*</span>img<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>  <span class="k1">int</span> nImages<span class="k2">;</span></td></tr><tr><td class="number">25</td><td><span class="k2">}</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (_Dante)</author>
		<pubDate>Wed, 05 Jul 2006 17:40:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
You basically have two choices, each has its own merits and drawbacks. You can either use multiple images, blitting the appropriate one at the appropriate time, or you can gather them all together into a single sheet, and blit the portion of the image that contains the correct frame.
</p></div></div><p>
Would using multiple, small sprites really have that adverse of an effect on animation though? What I&#39;ve found is if I pull out the animation entirely, the program moves just fine. Once I put the animation in, it cuts the speed by half. The only other thing I tried was removing a call to &quot;clear_bitmap()&quot; following my blit() where I sent the buffer I&#39;m updating to the screen, but without doing clear_bitmap(), I get copious amounts of artifacting (looks like my character has a motion trail).</p><p>Also, what does the ** mean in the code example you presented? I know a single * denotes a pointer, so what does the double-dose mean?</p><p>And any suggestions/comments on my animation issues? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (David_at_wedu)</author>
		<pubDate>Thu, 06 Jul 2006 00:44:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Would using multiple, small sprites really have that adverse of an effect on animation though?
</p></div></div><p>
It wouldn&#39;t have an adverse effect whatsoever - I just wouldn&#39;t personally do it that way. That&#39;s just me. If using an animation is cutting your speed in half, though, you&#39;re doing something wrong (maybe doing it twice).</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Also, what does the ** mean in the code example you presented?
</p></div></div><p>
It&#39;s a pointer to a pointer. If you&#39;re not very familiar with pointers, you need to get familiar with them very soon. If you have an array of objects (or anything else), and you don&#39;t know how large that array will be, you have to use a dynamic array.</p><p>So this:<br /><span class="source-code"><span class="k1">int</span> <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k2">[</span><span class="n">10</span><span class="k2">]</span><span class="k2">;</span></span><br />becomes this:<br /><span class="source-code"><span class="k1">int</span> <span class="k3">*</span>dynamic <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span> <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="n">10</span> <span class="k3">*</span> <span class="k1">sizeof</span><span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span></p><p>That works for primitive types, but a BITMAP must be referred to with a pointer to begin with, since that single object itself is created dynamically (plus you don&#39;t want it to go out of scope and disappear). But because you potentially need more than one, you point to pointers.</p><p>So this:<br /><span class="source-code"><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k2">[</span><span class="n">10</span><span class="k2">]</span><span class="k2">;</span></span><br />dynamic[0] = load_bitmap(&quot;bitmap0.bmp&quot;, NULL);<br />dynamic[1] = load_bitmap(&quot;bitmap1.bmp&quot;, NULL);<br />...<br />becomes this:
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span><span class="k3">*</span>dynamic <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span><span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="n">10</span> <span class="k3">*</span> <span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
dynamic<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"bitmap0.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
dynamic<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"bitmap1.bmp"</span>, NULL<span class="k2">)</span><span class="k2">;</span>
...
</pre></div></div><p>

Obviously I&#39;m oversimplifying and throwing out error checking, but that&#39;s the gist of it. This is really, really fundamental. If you don&#39;t fully understand pointers you&#39;ll run into trouble very quickly. Find some tutorials, buy a copy of K&amp;R, do whatever you have to do, but you definitely need to be very comfortable with this sort of construction.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (_Dante)</author>
		<pubDate>Thu, 06 Jul 2006 01:31:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>All of what you&#39;re saying makes sense, but it doesn&#39;t seem like any of it would affect the speed of my program&#39;s execution. Would a pointer to a pointer really be faster than accessing a vector element like I am now? </p><p>If you could offer some suggestions for changes to my code, it would be much appreciated. I feel like I&#39;m asking you to solve my problem, but that isn&#39;t my intention. I just catch onto concepts better when they&#39;re shown in context.</p><p>Here&#39;s the source below. A lot of the stuff I tried to fix my problem (to no avail) is still in there, just commented out (like using a rectfill instead of clear_bitmap):</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include &lt;vector&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="p">#define WHITE makecol(255,255,255)</span></td></tr><tr><td class="number">7</td><td><span class="p">#define RED makecol(255,0,0)</span></td></tr><tr><td class="number">8</td><td><span class="p">#define BLACK makecol(0,0,0)</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td><span class="p">#define DISPMODE GFX_AUTODETECT_WINDOWED</span></td></tr><tr><td class="number">11</td><td><span class="p">#define DISPDEPTH 32</span></td></tr><tr><td class="number">12</td><td><span class="p">#define DISPW 600</span></td></tr><tr><td class="number">13</td><td><span class="p">#define DISPH 900</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td><span class="k1">class</span> Sprite</td></tr><tr><td class="number">16</td><td><span class="k2">{</span></td></tr><tr><td class="number">17</td><td>public:</td></tr><tr><td class="number">18</td><td>    Sprite<span class="k2">(</span><span class="k1">char</span> bmp_name<span class="k2">[</span><span class="n">30</span><span class="k2">]</span>, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    ~Sprite<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>    <span class="k1">void</span> AddFrame<span class="k2">(</span><span class="k1">char</span> bmp_name<span class="k2">[</span><span class="n">30</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>    <span class="k1">char</span> bmp_name<span class="k2">[</span><span class="n">30</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> sprite_img<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>    <span class="k1">int</span> x, y<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>    <span class="k1">int</span> width, height<span class="k2">;</span></td></tr><tr><td class="number">26</td><td>    <span class="k1">int</span> xspeed, yspeed<span class="k2">;</span></td></tr><tr><td class="number">27</td><td>    <span class="k1">int</span> xcount, ycount<span class="k2">;</span></td></tr><tr><td class="number">28</td><td>    <span class="k1">int</span> xdelay, ydelay<span class="k2">;</span></td></tr><tr><td class="number">29</td><td>    <span class="k1">int</span> curframe, maxframe<span class="k2">;</span></td></tr><tr><td class="number">30</td><td>    <span class="k1">int</span> framecount, framedelay, animdir<span class="k2">;</span></td></tr><tr><td class="number">31</td><td>        vector<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span><span class="k3">&gt;</span> frames<span class="k2">;</span></td></tr><tr><td class="number">32</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td>Sprite::Sprite<span class="k2">(</span><span class="k1">char</span> bmp_name<span class="k2">[</span><span class="n">30</span><span class="k2">]</span>, <span class="k1">int</span> sx, <span class="k1">int</span> sy<span class="k2">)</span></td></tr><tr><td class="number">35</td><td><span class="k2">{</span></td></tr><tr><td class="number">36</td><td>        AddFrame<span class="k2">(</span>bmp_name<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>    x <span class="k3">=</span> sx<span class="k2">;</span></td></tr><tr><td class="number">38</td><td>    y <span class="k3">=</span> sy<span class="k2">;</span></td></tr><tr><td class="number">39</td><td>    xspeed <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>    yspeed <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    xcount <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>    ycount <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>    xdelay <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>    ydelay <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>    curframe <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>    maxframe <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>    framecount <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>    framedelay <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>    animdir <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td><span class="k2">}</span></td></tr><tr><td class="number">51</td><td>&#160;</td></tr><tr><td class="number">52</td><td>    <span class="k1">void</span> Sprite::AddFrame<span class="k2">(</span><span class="k1">char</span> bmp_name<span class="k2">[</span><span class="n">30</span><span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">53</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">54</td><td>&#160;</td></tr><tr><td class="number">55</td><td>        <span class="k1">int</span> s<span class="k2">;</span></td></tr><tr><td class="number">56</td><td>        sprite_img <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span>bmp_name, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">57</td><td>        <span class="k1">if</span> <span class="k2">(</span>sprite_img <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">58</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">59</td><td>            <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Error loading BITMAP"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>            <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">61</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">62</td><td>        frames.push_back<span class="k2">(</span>sprite_img<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td>        s <span class="k3">=</span> frames.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">64</td><td>        width <span class="k3">=</span> sprite_img-&gt;w<span class="k2">;</span></td></tr><tr><td class="number">65</td><td>        height <span class="k3">=</span> sprite_img-&gt;h<span class="k2">;</span></td></tr><tr><td class="number">66</td><td>&#160;</td></tr><tr><td class="number">67</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">68</td><td>&#160;</td></tr><tr><td class="number">69</td><td>Sprite::~Sprite<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">70</td><td><span class="k2">{</span></td></tr><tr><td class="number">71</td><td>    <span class="k1">int</span> s, x<span class="k2">;</span></td></tr><tr><td class="number">72</td><td>    s <span class="k3">=</span> frames.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">73</td><td>    <span class="k1">for</span> <span class="k2">(</span>x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>x<span class="k3">&lt;</span>s<span class="k2">;</span>x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">74</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">75</td><td>        <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>frames<span class="k2">[</span>x<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">76</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">77</td><td><span class="k2">}</span></td></tr><tr><td class="number">78</td><td>&#160;</td></tr><tr><td class="number">79</td><td><span class="k1">void</span> initialize<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">80</td><td><span class="k2">{</span></td></tr><tr><td class="number">81</td><td>    <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">82</td><td>    <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">83</td><td>    <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">84</td><td>    <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>DISPDEPTH<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">85</td><td>    <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>DISPMODE, DISPW, DISPH, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">86</td><td><span class="k2">}</span></td></tr><tr><td class="number">87</td><td>&#160;</td></tr><tr><td class="number">88</td><td><span class="k1">void</span> updatesprite<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> buffer, Sprite<span class="k3">*</span> spr, <span class="k1">int</span> dir<span class="k2">)</span></td></tr><tr><td class="number">89</td><td><span class="k2">{</span></td></tr><tr><td class="number">90</td><td>    <span class="k1">float</span> angle<span class="k2">;</span></td></tr><tr><td class="number">91</td><td><span class="c">//    int x = 0;</span></td></tr><tr><td class="number">92</td><td><span class="c">//    textout_ex(buffer, font, "My Project (ESC to quit)", 0, 0, WHITE, -1);</span></td></tr><tr><td class="number">93</td><td><span class="c">//    textprintf_ex(buffer, font, 0, 10, WHITE, -1, "sprite1 x, y: %i,%i", spr-&gt;x, spr-&gt;y);</span></td></tr><tr><td class="number">94</td><td><span class="c">//    textprintf_ex(buffer, font, 0, 20, WHITE, -1, "sprite1 width,height: %i,%i", spr-&gt;width, spr-&gt;height);</span></td></tr><tr><td class="number">95</td><td>    <span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">96</td><td>    <span class="k1">for</span> <span class="k2">(</span>x<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>x<span class="k3">&lt;</span>spr-&gt;frames.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>x<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">97</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">98</td><td>        <span class="k1">switch</span> <span class="k2">(</span>dir<span class="k2">)</span></td></tr><tr><td class="number">99</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">100</td><td>            <span class="k1">case</span> <span class="n">0</span> <span class="k2">:</span></td></tr><tr><td class="number">101</td><td>                <a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>buffer, spr-&gt;frames<span class="k2">[</span>x<span class="k2">]</span>, spr-&gt;x, spr-&gt;y, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="k3">-</span><span class="n">64</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">102</td><td>                <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">600</span>, <span class="n">900</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">103</td><td><span class="c">//                clear_bitmap(buffer);</span></td></tr><tr><td class="number">104</td><td>                <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>buffer, <span class="k2">(</span>spr-&gt;x-spr-&gt;width<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;y-spr-&gt;height<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;x<span class="k3">+</span>spr-&gt;width<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;y<span class="k3">+</span>spr-&gt;height<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, BLACK<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">105</td><td>                <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">106</td><td>            <span class="k1">case</span> <span class="n">1</span> <span class="k2">:</span></td></tr><tr><td class="number">107</td><td>                <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>buffer, spr-&gt;frames<span class="k2">[</span>x<span class="k2">]</span>, spr-&gt;x, spr-&gt;y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">108</td><td>                <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">600</span>, <span class="n">900</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">109</td><td>                <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>buffer, <span class="k2">(</span>spr-&gt;x-spr-&gt;width<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;y-spr-&gt;height<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;x<span class="k3">+</span>spr-&gt;width<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;y<span class="k3">+</span>spr-&gt;height<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, BLACK<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">110</td><td><span class="c">//                clear_bitmap(buffer);</span></td></tr><tr><td class="number">111</td><td>                <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">112</td><td>            <span class="k1">case</span> <span class="n">2</span> <span class="k2">:</span></td></tr><tr><td class="number">113</td><td>                <a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>buffer, spr-&gt;frames<span class="k2">[</span>x<span class="k2">]</span>, spr-&gt;x, spr-&gt;y, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">64</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">114</td><td>                <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">600</span>, <span class="n">900</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">115</td><td>                <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>buffer, <span class="k2">(</span>spr-&gt;x-spr-&gt;width<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;y-spr-&gt;height<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;x<span class="k3">+</span>spr-&gt;width<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;y<span class="k3">+</span>spr-&gt;height<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, BLACK<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">116</td><td><span class="c">//                clear_bitmap(buffer);</span></td></tr><tr><td class="number">117</td><td>                <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">118</td><td>            <span class="k1">case</span> <span class="n">3</span> <span class="k2">:</span></td></tr><tr><td class="number">119</td><td>                <a href="http://www.allegro.cc/manual/draw_sprite_h_flip" target="_blank"><span class="a">draw_sprite_h_flip</span></a><span class="k2">(</span>buffer, spr-&gt;frames<span class="k2">[</span>x<span class="k2">]</span>, spr-&gt;x, spr-&gt;y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">120</td><td>                <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">600</span>, <span class="n">900</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">121</td><td>                <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>buffer, <span class="k2">(</span>spr-&gt;x-spr-&gt;width<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;y-spr-&gt;height<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;x<span class="k3">+</span>spr-&gt;width<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;y<span class="k3">+</span>spr-&gt;height<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, BLACK<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">122</td><td><span class="c">//                clear_bitmap(buffer);</span></td></tr><tr><td class="number">123</td><td>                <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">124</td><td>            <span class="k1">default</span> <span class="k2">:</span></td></tr><tr><td class="number">125</td><td>                <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>buffer, spr-&gt;frames<span class="k2">[</span>x<span class="k2">]</span>, <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span><span class="k3">-</span>spr-&gt;width<span class="k3">/</span><span class="n">2</span><span class="k2">)</span>, <span class="n">600</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">126</td><td>                <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">600</span>, <span class="n">900</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">127</td><td>                <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>buffer, <span class="k2">(</span>spr-&gt;x-spr-&gt;width<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;y-spr-&gt;height<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;x<span class="k3">+</span>spr-&gt;width<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, <span class="k2">(</span>spr-&gt;y<span class="k3">+</span>spr-&gt;height<span class="k3">+</span><span class="n">5</span><span class="k2">)</span>, BLACK<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">128</td><td><span class="c">//                clear_bitmap(buffer);</span></td></tr><tr><td class="number">129</td><td>                spr-&gt;x <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span><span class="k3">-</span>spr-&gt;width<span class="k3">/</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">130</td><td>                spr-&gt;y <span class="k3">=</span> <span class="n">600</span><span class="k2">;</span></td></tr><tr><td class="number">131</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">132</td><td>        <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">133</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">134</td><td>&#160;</td></tr><tr><td class="number">135</td><td><span class="c">//        blit(buffer, screen, 0, 0, 0, 0, 600, 900);</span></td></tr><tr><td class="number">136</td><td><span class="c">//        clear_bitmap(buffer);</span></td></tr><tr><td class="number">137</td><td><span class="c">//      rest(30);</span></td></tr><tr><td class="number">138</td><td><span class="k2">}</span></td></tr><tr><td class="number">139</td><td>&#160;</td></tr><tr><td class="number">140</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">141</td><td><span class="k2">{</span></td></tr><tr><td class="number">142</td><td>    initialize<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">143</td><td>    <span class="k1">int</span> dir<span class="k2">;</span></td></tr><tr><td class="number">144</td><td>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><span class="n">600</span>, <span class="n">900</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">145</td><td>&#160;</td></tr><tr><td class="number">146</td><td>    Sprite<span class="k3">*</span> sprite1 <span class="k3">=</span> <span class="k1">new</span> Sprite<span class="k2">(</span><span class="s">"sprites_pacman1.bmp"</span>, <span class="n">75</span>, <span class="n">75</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">147</td><td>    sprite1-&gt;AddFrame<span class="k2">(</span><span class="s">"sprites_pacman2.bmp"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">148</td><td>    sprite1-&gt;AddFrame<span class="k2">(</span><span class="s">"sprites_pacman3.bmp"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">149</td><td>    sprite1-&gt;AddFrame<span class="k2">(</span><span class="s">"sprites_pacman4.bmp"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">150</td><td>&#160;</td></tr><tr><td class="number">151</td><td>    <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">152</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">153</td><td>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">154</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">155</td><td>            dir <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span></td></tr><tr><td class="number">156</td><td>            sprite1-&gt;x <span class="k3">-</span><span class="k3">=</span> sprite1-&gt;xspeed<span class="k2">;</span></td></tr><tr><td class="number">157</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">158</td><td>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">159</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">160</td><td>            dir <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">161</td><td>            sprite1-&gt;x <span class="k3">+</span><span class="k3">=</span> sprite1-&gt;xspeed<span class="k2">;</span></td></tr><tr><td class="number">162</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">163</td><td>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">164</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">165</td><td>            dir <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">166</td><td>            sprite1-&gt;y <span class="k3">-</span><span class="k3">=</span> sprite1-&gt;yspeed<span class="k2">;</span></td></tr><tr><td class="number">167</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">168</td><td>        <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">169</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">170</td><td>            dir <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">171</td><td>            sprite1-&gt;y <span class="k3">+</span><span class="k3">=</span> sprite1-&gt;yspeed<span class="k2">;</span></td></tr><tr><td class="number">172</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">173</td><td>&#160;</td></tr><tr><td class="number">174</td><td>        <span class="k1">if</span> <span class="k2">(</span>sprite1-&gt;y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">175</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">176</td><td>            sprite1-&gt;y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">177</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">178</td><td>        <span class="k1">if</span> <span class="k2">(</span>sprite1-&gt;y <span class="k3">&gt;</span> SCREEN_H-sprite1-&gt;width<span class="k2">)</span></td></tr><tr><td class="number">179</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">180</td><td>            sprite1-&gt;y <span class="k3">=</span> SCREEN_H-sprite1-&gt;width<span class="k2">;</span></td></tr><tr><td class="number">181</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">182</td><td>        <span class="k1">if</span> <span class="k2">(</span>sprite1-&gt;x <span class="k3">&gt;</span> SCREEN_W-sprite1-&gt;width<span class="k2">)</span></td></tr><tr><td class="number">183</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">184</td><td>            sprite1-&gt;x <span class="k3">=</span> SCREEN_W-sprite1-&gt;width<span class="k2">;</span></td></tr><tr><td class="number">185</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">186</td><td>        <span class="k1">if</span> <span class="k2">(</span>sprite1-&gt;x  <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">187</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">188</td><td>            sprite1-&gt;x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">189</td><td>        <span class="k2">}</span></td></tr><tr><td class="number">190</td><td>        updatesprite<span class="k2">(</span>buffer, sprite1, dir<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">191</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">192</td><td>    <span class="k1">delete</span> sprite1<span class="k2">;</span></td></tr><tr><td class="number">193</td><td>&#160;</td></tr><tr><td class="number">194</td><td>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">195</td><td><span class="k2">}</span></td></tr><tr><td class="number">196</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

Also, I know my animation process is kind of Frankenstein&#39;ed... Any suggestions on a good tutorial for doing animation that preferably deals with their sprites as a class?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (David_at_wedu)</author>
		<pubDate>Thu, 06 Jul 2006 23:00:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This suggestion may not be what you looking for, but this is what I have ended up doing in my project.</p><p>If you want to go OOP simply create a class for everything. So you would end up having a class for Frames, Animation, AnimationMgr, Objects, Tiles, Sprites, etc.</p><p>Think of this way, Tiles and Sprites are different, but they share common attributes and functions. Therefore, create an Object class and derive from it Tile and Sprite.</p><p>Object class would have an Animation Manager that could contain more then one animation. After all, a sprite would have a number of animations, such as waling, shooting, dying, etc. Tiles can also have multiple animations based on the events.<br />The Animation Manager (like the name says) manages animations. The Animation class only worries abut frames that build up this animation. While frame class contains the information in regards to a frame.</p><p>Frame could have an ID, Name, Delay, Counter, BITMAP<br />Animation then can have a list or an array of frames, current frame, etc.<br />Animation Manager can have a list of animations, current animation, etc.<br />Object has Animation Manager, along with other attributes.<br />Tile inherits Object class and implements its own attributes and functions.<br />Sprite, just like a Tile class does the same thing with a difference of its own needs.</p><p>From that you can then derive a Player class, Enemy, or whatever else you may need. Best of all, each derived object will be able to handle animations just like any other object. <br />If you feel that some of the Objects will not be in need for an animation, then all you do is create a single Animation with a single frame and that is it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mariusz)</author>
		<pubDate>Fri, 07 Jul 2006 04:29:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Frame could have an ID, Name, Delay, Counter, BITMAP<br />Animation then can have a list or an array of frames, current frame, etc.<br />Animation Manager can have a list of animations, current animation, etc.<br />Object has Animation Manager, along with other attributes.<br />Tile inherits Object class and implements its own attributes and functions.<br />Sprite, just like a Tile class does the same thing with a difference of its own needs.</p><p>From that you can then derive a Player class, Enemy, or whatever else you may need. Best of all, each derived object will be able to handle animations just like any other object.<br />If you feel that some of the Objects will not be in need for an animation, then all you do is create a single Animation with a single frame and that is it.
</p></div></div><p>
I get what you&#39;re saying... I think really my major problem is figuring out how to make part a relate to part b, and for part c to use part b when necessary. I have experience with OOP, though limited, but my biggest hurdle currently is my main source (in terms of reference material) is loaded with questionable practices. So I&#39;ve been doing code my own way, in a manner of speaking, as not to duplicate the author&#39;s mistakes; instead, I&#39;m making a lot of my own.</p><p>The best example I can give is my issue with doing animations. I&#39;ve still yet to find a straight forward tutorial anywhere online.</p><p>Not to mention I am baffled by the performance hit between when I have my animation running (though messy in execution) and when my sprites are static and don&#39;t animate. From what I can tell about my code, I&#39;m not breaking any major rules of programming, so such a hit in performance shouldn&#39;t be happening... But again, it just illustrates my inexperience in the matter, and a lack of a direct mentor doesn&#39;t help. <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (David_at_wedu)</author>
		<pubDate>Sat, 08 Jul 2006 01:22:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Game Programming All In One 2e? Me too. I recall it saying that the rotate and fliping algorithisms are long and complex. Maybe you should create all of the images at runtime, and then draw_sprite the right one. Use more of his code, it works. The BITMAP array that holds animations actually works. If you want, I&#39;ll post my sprite handler, also a class, but closer to what the book said.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (aadfo824)</author>
		<pubDate>Sun, 09 Jul 2006 09:34:21 +0000</pubDate>
	</item>
</rss>
