<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Help with a small function</title>
		<link>http://www.allegro.cc/forums/view/587012</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 13 Aug 2006 10:13:20 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I use this to load more then one sprite from a data file.  I am trying to lose about 15-20 lines of code by making this a function.</p><div class="source-code snippet"><div class="inner"><pre>temp <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="k2">)</span>data<span class="k2">[</span>EXPLODE_BMP<span class="k2">]</span>.dat<span class="k2">;</span>
     <span class="k1">for</span> <span class="k2">(</span>n <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>n<span class="k3">&lt;</span><span class="n">6</span><span class="k2">;</span>n<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
         explode<span class="k2">[</span>n<span class="k2">]</span> <span class="k3">=</span> grabframe<span class="k2">(</span>temp,<span class="n">17</span>,<span class="n">17</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">1</span>,n<span class="k2">)</span><span class="k2">;</span>
     <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>temp<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

I just have no idea where to start.  I just want it to be universal like</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> sprite_load<span class="k2">(</span>Bitmap in datafile,<span class="k1">int</span> framex,<span class="k1">int</span> framey,<span class="k1">int</span> frames,bitmap<span class="k2">)</span>
<span class="k2">{</span>
temp <span class="k3">=</span> Bitmap in datafile<span class="k2">;</span>
<span class="k1">for</span> <span class="k2">(</span>n <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>n <span class="k3">&lt;</span> frames<span class="k2">;</span> n<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
bitmap<span class="k2">[</span>n<span class="k2">]</span> to load <span class="k3">=</span> grabframe<span class="k2">(</span>temp,framex,framey,<span class="n">0</span>,<span class="n">0</span>,<span class="n">1</span>,n<span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>temp<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

can anyone help on this I am lost. More so on the <br />temp = (BITMAP *)data[EXPLODE_BMP].dat;<br />and the<br />explode[n]<br />part
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CIRCLE)</author>
		<pubDate>Sun, 13 Aug 2006 09:10:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think an easier thing to do in your case would be to load the datafile, keep it in memory, then simply create an array of pointers for your sprites to point to the objects in the datafile. For instance:</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 "gamedata.h"   // Contains datafile constants</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="p">#define MAX_FPAS 16     // Max Frames per Animated Sprite</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><span class="k1">class</span> T_ANIMSPRITE <span class="k2">{</span></td></tr><tr><td class="number">6</td><td>    public:</td></tr><tr><td class="number">7</td><td>    <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>sprite<span class="k2">[</span>MAX_FPAS<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <span class="k1">int</span> numframes<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    <span class="k1">void</span> AddFrame<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bitmap<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a> <span class="k3">*</span>data<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>T_ANIMSPRITE sprite_explode<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td><span class="k1">void</span> T_ANIMSPRITE::AddFrame<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bitmap<span class="k2">)</span></td></tr><tr><td class="number">16</td><td><span class="k2">{</span></td></tr><tr><td class="number">17</td><td>    sprite<span class="k2">[</span>numframes<span class="k2">]</span> <span class="k3">=</span> bitmap<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>    numframes<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="k1">int</span> main <span class="k2">(</span><span class="k1">void</span><span class="k2">)</span></td></tr><tr><td class="number">22</td><td><span class="k2">{</span></td></tr><tr><td class="number">23</td><td>    <span class="k1">int</span> z<span class="k2">;</span></td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td>    <span class="c">// Initialization Code Goes Here</span></td></tr><tr><td class="number">26</td><td>&#160;</td></tr><tr><td class="number">27</td><td>    data <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_datafile" target="_blank"><span class="a">load_datafile</span></a><span class="k2">(</span><span class="s">"GAMEDATA.DAT"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>    <span class="k1">for</span> <span class="k2">(</span>z <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> z <span class="k3">&lt;</span> <span class="n">12</span><span class="k2">;</span> z<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="c">// There are 12 frames in the explosion.</span></td></tr><tr><td class="number">29</td><td>        sprite_explode.AddFrame<span class="k2">(</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>data<span class="k2">[</span>EXPLODEFRAME_00<span class="k3">+</span>z<span class="k2">]</span>.dat<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>    <span class="c">// Cleanup Code Goes Here</span></td></tr><tr><td class="number">32</td><td>&#160;</td></tr><tr><td class="number">33</td><td>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td><span class="k2">}</span></td></tr><tr><td class="number">35</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>

Totally untested and written just now as C++ code. (IE: Useless if you only use C.) Gives you a basic idea of how to do it, right?</p><p>The only reason you would need to do it the way you&#39;re thinking is if all your frames are located on just ONE bitmap, instead of each frame being its own bitmap. Then what you could do is add some coordinate picking to the routines above and create sub_bitmaps off of the bitmaps in the datafile so as not to waste memory.</p><p>Why load, copy and use when you can just load and use? <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p>Once its loaded, to actually play the animation back you&#39;ll need to write a routine to fit your game engine so that it can loop through the frames and display the correct one. This process will completely depend on what kind of game engine you&#39;re going to make so it&#39;s hard to give you an example.</p><p>Just try what feels right and you&#39;ll get it.</p><p>--- Kris Asick (Gemini)<br />--- <a href="http://www.pixelships.com">http://www.pixelships.com</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Sun, 13 Aug 2006 09:30:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well I get why I couldn&#39;t figure that out.  I need to learn more about what</p><p>:: does and the + in EXPLODEFRAME_00+z should start looking up class stuff as well...I guess I should get started on learning more on C++ instead of getting more into Allegro.</p><p>Thanks for the help I will test it out as soon as I understand how to apply it.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Why load, copy and use when you can just load and use?
</p></div></div><p>
I can do that with an animation?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CIRCLE)</author>
		<pubDate>Sun, 13 Aug 2006 09:42:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I guess I should get started on learning more on C++ instead of getting more into Allegro.
</p></div></div><p>

A knowledge of C++ isn&#39;t required to use allegro, though it can certainly help in some cases.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I need to learn more about what :: does
</p></div></div><p>

That&#39;s the scope operator. It is used in this case to show what class a function belongs to.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
+ in EXPLODEFRAME_00+z
</p></div></div><p>

That&#39;s the same as the + in 1 + 1.  EXPLODEFRAME_00 is just a macro definition for an integer value (the index from the .dat file), eg 17. Using data[17].dat would point to the same file in the data file. The next file in the .dat is going to be data[18].dat, which is the same as data[17 + 1].dat, which is the same as data[EXPLODEFRAME_00 + 1].dat.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I can do that with an animation?
</p></div></div><p>

Kris Aswick&#39;s method assumes that there is a seperate bitmap for every frame of the animation, which is not how you have done things. </p><p>A better way for you to do things using one bitmap with all the frames is to use <a href="http://www.allegro.cc/manual/api/bitmap-objects/create_sub_bitmap">create_sub_bitmap()</a>.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Sun, 13 Aug 2006 10:07:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You don&#39;t HAVE to learn C++. I just prefer it because I&#39;m used to OOP. (Object Oriented Programming.) Heck, some of the greatest programmers out there swear that C++ is the worst implementation of it possible and stay clear of it like the plague!</p><p>Not me though.</p><p>But yeah, once something&#39;s loaded in memory in C or C++, you can just reference it with pointers instead of creating more and more memory for all of it to go into. For instance, if you wanted four extra bitmaps to all be the exact same as one you create:</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>primary_bitmap<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bitmap_pointer<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bparray<span class="k2">[</span><span class="n">3</span><span class="k2">]</span><span class="k2">;</span>

primary_bitmap <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">64</span>,<span class="n">64</span><span class="k2">)</span><span class="k2">;</span>
bitmap_pointer <span class="k3">=</span> primary_bitmap<span class="k2">;</span>
bparray<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> primary_bitmap<span class="k2">;</span>
bparray<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> primary_bitmap<span class="k2">;</span>
bparray<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <span class="k3">=</span> primary_bitmap<span class="k2">;</span>
</pre></div></div><p>

No matter which of those you access, you will get the bitmap you created. Which means if you MODIFY that bitmap, ALL of them are modified, and if you remove it from memory, all the other pointers now reference an area of memory that&#39;s no longer used and should be manually set back to NULL. For example:</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// Crash your program real FAST with this code!</span>

<a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>my_bitmap<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>draw_bitmap<span class="k2">;</span>

my_bitmap <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">64</span>,<span class="n">64</span><span class="k2">)</span><span class="k2">;</span>
draw_bitmap <span class="k3">=</span> my_bitmap<span class="k2">;</span>
<a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>my_bitmap<span class="k2">)</span><span class="k2">;</span>
<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>,draw_bitmap,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

No matter which bitmap you destroy in the above example, if you try to draw either of them afterwards you will end up crashing the program!</p><p>The trick is to realize that a variable and the contents of a variable are two completely different things in C. A pointer is simply the memory address of something in memory, like a bitmap or a sound effect or even an array.</p><p>So really, for what you want to do, you don&#39;t need to go learning C++. Just learn pointers and the rest should be obvious!</p><p>--- Kris Asick (Gemini)<br />--- <a href="http://www.pixelships.com">http://www.pixelships.com</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Sun, 13 Aug 2006 10:13:20 +0000</pubDate>
	</item>
</rss>
