<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Another newbie question (100% cpu usage and memory leak)</title>
		<link>http://www.allegro.cc/forums/view/585495</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 20 May 2006 02:34:25 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hey i&#39;m working on getting the basic components down for a game I am working on in my spare time, and I have just started doing keyboard initiated movement.  However,if I open the task manager while the program is running, it shows CPU usage at 100%, and if I move my character up and down, my pagefile usage and overall memory usage slowly climb.  Here&#39;s the main parts of my movement code:</p><p>Main (skipped over basic initialization code):
</p><div class="source-code snippet"><div class="inner"><pre>  <span class="k1">while</span><span class="k2">(</span><span class="k3">!</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_ESC<span class="k2">]</span><span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>    <span class="c">//begin main game loop</span>
    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
    <span class="k2">{</span>    
      animatePC<span class="k2">(</span>character_data,landFile,playerPos<span class="k2">)</span><span class="k2">;</span>
      <a href="http://www.allegro.cc/manual/clear_keybuf" target="_blank"><span class="a">clear_keybuf</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    <span class="k2">}</span>
  <span class="k2">}</span>
</pre></div></div><p>

animatePC:
</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">void</span> animatePC<span class="k2">(</span><span class="k1">const</span> <a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a> <span class="k3">*</span>character_data,<span class="k1">const</span> <a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a> <span class="k3">*</span>landFile, position <span class="k3">&amp;</span>playerPos<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</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><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">5</td><td>  <span class="k1">int</span> newY <span class="k3">=</span> playerPos.posY<span class="k2">;</span></td></tr><tr><td class="number">6</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><span class="k2">{</span> <span class="c">//if down key is hit, walk down to next tile</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">int</span> count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span> newY <span class="k3">&lt;</span> playerPos.posY <span class="k3">+</span> <span class="n">32</span> <span class="k2">;</span> newY<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">9</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>      <span class="k1">if</span><span class="k2">(</span>count <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span></td></tr><tr><td class="number">11</td><td>        count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>      <span class="k1">else</span> </td></tr><tr><td class="number">13</td><td>        count<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>      buffer <span class="k3">=</span> draw_map<span class="k2">(</span>landFile<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</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,<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>character_data<span class="k2">[</span>count<span class="k2">]</span>.dat,<span class="n">0</span>,newY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>      DrawDoublebuffer<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>      <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">18</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">19</td><td>    count <span class="k3">=</span> <span class="n">0</span><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="k2">}</span></td></tr><tr><td class="number">22</td><td>  <span class="k1">else</span> <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><span class="k2">{</span> <span class="c">//else if up key is hit, walk up to next tile</span></td></tr><tr><td class="number">23</td><td>    <span class="k1">int</span> frameCount <span class="k3">=</span> <span class="n">11</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span> newY <span class="k3">&gt;</span> playerPos.posY <span class="k3">-</span> <span class="n">32</span> <span class="k2">;</span> newY--<span class="k2">)</span></td></tr><tr><td class="number">25</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>      <span class="k1">if</span><span class="k2">(</span>frameCount <span class="k3">=</span><span class="k3">=</span> <span class="n">12</span><span class="k2">)</span></td></tr><tr><td class="number">27</td><td>        frameCount <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>      <span class="k1">else</span> </td></tr><tr><td class="number">29</td><td>        frameCount<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>      buffer <span class="k3">=</span> draw_map<span class="k2">(</span>landFile<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</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,<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>character_data<span class="k2">[</span>frameCount<span class="k2">]</span>.dat,<span class="n">0</span>,newY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>      DrawDoublebuffer<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</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>buffer<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>    frameCount <span class="k3">=</span> <span class="n">11</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">38</td><td>  playerPos.posY <span class="k3">=</span> newY<span class="k2">;</span></td></tr><tr><td class="number">39</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Doublebuffer Code:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> DrawDoublebuffer<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<span class="k2">)</span> <span class="k2">{</span>
    <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    <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>, buffer-&gt;w, buffer-&gt;h<span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

and finally Drawmap
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>draw_map<span class="k2">(</span><span class="k1">const</span> <a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a> <span class="k3">*</span>landFile<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buff <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><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buff<span class="k2">)</span><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="k1">int</span> mapXtotal <span class="k3">=</span> <span class="n">20</span> <span class="k3">*</span> <span class="n">32</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  <span class="k1">int</span> mapYtotal <span class="k3">=</span> <span class="n">18</span> <span class="k3">*</span> <span class="n">32</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> x <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> x <span class="k3">&lt;</span> mapXtotal<span class="k2">;</span> x <span class="k3">=</span> x<span class="k3">+</span><span class="n">32</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">9</td><td>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> y <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> y <span class="k3">&lt;</span><span class="k3">=</span> mapYtotal<span class="k2">;</span> y <span class="k3">=</span> y<span class="k3">+</span><span class="n">32</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">10</td><td>      <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>buff,<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>landFile<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.dat,x,y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    <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="k1">int</span> size <span class="k3">=</span> <a href="http://www.allegro.cc/manual/text_length" target="_blank"><span class="a">text_length</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, versionNumber.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//display version number</span></td></tr><tr><td class="number">14</td><td>    <a href="http://www.allegro.cc/manual/textout_right_ex" target="_blank"><span class="a">textout_right_ex</span></a><span class="k2">(</span>buff, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, versionNumber.c_str<span class="k2">(</span><span class="k2">)</span>, SCREEN_W-10, SCREEN_H-10, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>  <span class="k1">return</span> buff<span class="k2">;</span></td></tr><tr><td class="number">16</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>


any help for fixing either of these problems would be greatly appreciated.  as far as I can tell I&#39;m destroying all bitmaps after they&#39;re used, so I dont know why the memory usage continues to climb every time I move in a direction.  As for the 100% cpu, I&#39;m assuming its cause I&#39;m constantly checking for a keypress.  if thats the reason for it, is there an easy way to fix this? any help would be greatly appreciated.  thanks
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Justin Slowik)</author>
		<pubDate>Sat, 20 May 2006 00:18:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Regarding 100% CPU usage, you&#39;ll have to throw a rest(1) in there somewhere. Keep in mind that it will probably rest for 10ms. Or you can rest(0) which &quot;plays nice,&quot; but still uses 100% CPU.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Sat, 20 May 2006 00:20:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>And as for the memory leak, you never destroy &quot;buff&quot; in draw_map().</p><p>That said, <u>don&#39;t</u> recreate your buffers every time. It&#39;s horribly inefficient. Create them once at the start of the program and destroy them once at the end.</p><p>Also, look into separating your logic and your drawing...</p><p>[EDIT]<br />If I were you I&#39;d dump the acquire and release as well when I was at it, as you&#39;re only doing one operation to the screen. Chances are that, one day, you&#39;ll be tempted to put something that doesn&#39;t belong there in between them... and then your program will die a gruesome death.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Sat, 20 May 2006 00:25:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>thanks for the rest() idea.  that fixed the cpu time a bunch!  now as for the leak I seem to be having, i realized its not my main memory thats leaking anymore, it does increase while moving but when I stop it goes back down again.  however, my pagefile usage does climb slowly but surely.  And I&#39;m afraid after an extended period of time I&#39;ll overflow.  Any other ideas on that?  the pagefile seems to climb 1-5 MB every time I move 1 tile space.  </p><p>[edit]<br />thanks gnolam for the advice.  I&#39;ll be separating stuff out at some point, right now I&#39;m just trying to get the basics down as they come to me.  I&#39;ll be separating into classes and such probably later in the weekend.  And i&#39;ll look into the tips you gave me now, see if any of them affect the mem usage.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Justin Slowik)</author>
		<pubDate>Sat, 20 May 2006 00:27:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I believe your code has a great memory leak. See function <i>animatePC</i>. You create a buffer. But you only destroy it a couple of times inside for cycles. Your function should be like this instead:</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">void</span> animatePC<span class="k2">(</span><span class="k1">const</span> <a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a> <span class="k3">*</span>character_data,<span class="k1">const</span> <a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a> <span class="k3">*</span>landFile, position <span class="k3">&amp;</span>playerPos<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</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><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">5</td><td>  <span class="k1">int</span> newY <span class="k3">=</span> playerPos.posY<span class="k2">;</span></td></tr><tr><td class="number">6</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><span class="k2">{</span> <span class="c">//if down key is hit, walk down to next tile</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">int</span> count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span> newY <span class="k3">&lt;</span> playerPos.posY <span class="k3">+</span> <span class="n">32</span> <span class="k2">;</span> newY<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">9</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>      <span class="k1">if</span><span class="k2">(</span>count <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span></td></tr><tr><td class="number">11</td><td>        count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>      <span class="k1">else</span> </td></tr><tr><td class="number">13</td><td>        count<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>      buffer <span class="k3">=</span> draw_map<span class="k2">(</span>landFile<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</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,<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>character_data<span class="k2">[</span>count<span class="k2">]</span>.dat,<span class="n">0</span>,newY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>      DrawDoublebuffer<span class="k2">(</span>buffer<span class="k2">)</span><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>    count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">21</td><td>  <span class="k1">else</span> <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><span class="k2">{</span> <span class="c">//else if up key is hit, walk up to next tile</span></td></tr><tr><td class="number">22</td><td>    <span class="k1">int</span> frameCount <span class="k3">=</span> <span class="n">11</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span> newY <span class="k3">&gt;</span> playerPos.posY <span class="k3">-</span> <span class="n">32</span> <span class="k2">;</span> newY--<span class="k2">)</span></td></tr><tr><td class="number">24</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">25</td><td>      <span class="k1">if</span><span class="k2">(</span>frameCount <span class="k3">=</span><span class="k3">=</span> <span class="n">12</span><span class="k2">)</span></td></tr><tr><td class="number">26</td><td>        frameCount <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>      <span class="k1">else</span> </td></tr><tr><td class="number">28</td><td>        frameCount<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>&#160;</td></tr><tr><td class="number">30</td><td>      buffer <span class="k3">=</span> draw_map<span class="k2">(</span>landFile<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</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,<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>character_data<span class="k2">[</span>frameCount<span class="k2">]</span>.dat,<span class="n">0</span>,newY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>      DrawDoublebuffer<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">34</td><td>    frameCount <span class="k3">=</span> <span class="n">11</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>  playerPos.posY <span class="k3">=</span> newY<span class="k2">;</span></td></tr><tr><td class="number">37</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Sat, 20 May 2006 00:35:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ReyBrujo, I tried your idea, and it just made my pagefile leakage climb at least 2 or 3 times faster.  <s>shrug</s> This is gonna drive me insane hah.  lets see if i clean up my code how i do.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Justin Slowik)</author>
		<pubDate>Sat, 20 May 2006 00:42:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hehehe, the problem is that draw_map is creating bitmaps that are never being destroyed too. This code should work. Don&#39;t create a bitmap inside animatePC:</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">void</span> animatePC<span class="k2">(</span><span class="k1">const</span> <a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a> <span class="k3">*</span>character_data,<span class="k1">const</span> <a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a> <span class="k3">*</span>landFile, position <span class="k3">&amp;</span>playerPos<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</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="k2">;</span>  </td></tr><tr><td class="number">5</td><td>  <span class="k1">int</span> newY <span class="k3">=</span> playerPos.posY<span class="k2">;</span></td></tr><tr><td class="number">6</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><span class="k2">{</span> <span class="c">//if down key is hit, walk down to next tile</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">int</span> count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span> newY <span class="k3">&lt;</span> playerPos.posY <span class="k3">+</span> <span class="n">32</span> <span class="k2">;</span> newY<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">9</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>      <span class="k1">if</span><span class="k2">(</span>count <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span></td></tr><tr><td class="number">11</td><td>        count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>      <span class="k1">else</span> </td></tr><tr><td class="number">13</td><td>        count<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>      buffer <span class="k3">=</span> draw_map<span class="k2">(</span>landFile<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</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,<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>character_data<span class="k2">[</span>count<span class="k2">]</span>.dat,<span class="n">0</span>,newY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>      DrawDoublebuffer<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>      <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">18</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">19</td><td>    count <span class="k3">=</span> <span class="n">0</span><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="k2">}</span></td></tr><tr><td class="number">22</td><td>  <span class="k1">else</span> <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><span class="k2">{</span> <span class="c">//else if up key is hit, walk up to next tile</span></td></tr><tr><td class="number">23</td><td>    <span class="k1">int</span> frameCount <span class="k3">=</span> <span class="n">11</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span> newY <span class="k3">&gt;</span> playerPos.posY <span class="k3">-</span> <span class="n">32</span> <span class="k2">;</span> newY--<span class="k2">)</span></td></tr><tr><td class="number">25</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>      <span class="k1">if</span><span class="k2">(</span>frameCount <span class="k3">=</span><span class="k3">=</span> <span class="n">12</span><span class="k2">)</span></td></tr><tr><td class="number">27</td><td>        frameCount <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>      <span class="k1">else</span> </td></tr><tr><td class="number">29</td><td>        frameCount<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>      buffer <span class="k3">=</span> draw_map<span class="k2">(</span>landFile<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</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,<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>character_data<span class="k2">[</span>frameCount<span class="k2">]</span>.dat,<span class="n">0</span>,newY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>      DrawDoublebuffer<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</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>buffer<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>    frameCount <span class="k3">=</span> <span class="n">11</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">38</td><td>  playerPos.posY <span class="k3">=</span> newY<span class="k2">;</span></td></tr><tr><td class="number">39</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Sat, 20 May 2006 00:45:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Rey! that fixed it now.  I appreciate the help now i cna move on w/ my life hah.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Justin Slowik)</author>
		<pubDate>Sat, 20 May 2006 00:53:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>create_bitmap()  is a signifacnt cost,  only do it if you have to.<br />also ALWAYS check its return code, so if it actaully worked.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A J)</author>
		<pubDate>Sat, 20 May 2006 02:34:25 +0000</pubDate>
	</item>
</rss>
