<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Slowing down animation</title>
		<link>http://www.allegro.cc/forums/view/585911</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 16 Jun 2006 01:57:59 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve searched and searched this forum, gamedev and other language forums(blitz, dark basic, etc) without a really specific answer.  How would I go about slowing animation of a character.  Like I got the the fps limiting to 30 fps but the frames of the actual character are still to fast.  I don&#39;t care what language you write it in(although C would be best).  I just need some logic or the actual code.  thanks for any help.</p><p>right now i have something like this.
</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> drawScreen<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> b, <span class="k1">struct</span> S_Player<span class="k3">*</span> p<span class="k2">)</span> <span class="k2">{</span>       </td></tr><tr><td class="number">2</td><td>                                                     </td></tr><tr><td class="number">3</td><td>        <span class="k1">while</span> <span class="k2">(</span>game_time <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span> </td></tr><tr><td class="number">4</td><td>              </td></tr><tr><td class="number">5</td><td>              game_time <span class="k3">-</span><span class="k3">-</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>              updateInput<span class="k2">(</span>p<span class="k2">)</span><span class="k2">;</span>  <span class="c">//Input </span></td></tr><tr><td class="number">7</td><td>        <span class="k2">}</span>        </td></tr><tr><td class="number">8</td><td>       </td></tr><tr><td class="number">9</td><td>       <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>b<span class="k2">)</span><span class="k2">;</span> </td></tr><tr><td class="number">10</td><td>          </td></tr><tr><td class="number">11</td><td>       <span class="k1">if</span> <span class="k2">(</span>p-&gt;key <span class="k3">=</span><span class="k3">=</span> <span class="n">0</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>           <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>b,p-&gt;img<span class="k2">[</span>p-&gt;current<span class="k2">]</span>,p-&gt;x,p-&gt;y<span class="k2">)</span><span class="k2">;</span>           </td></tr><tr><td class="number">14</td><td>             </td></tr><tr><td class="number">15</td><td>        <span class="k2">}</span> <span class="k1">else</span> <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>b,p-&gt;img<span class="k2">[</span>p-&gt;current<span class="k2">]</span>,p-&gt;x,p-&gt;y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>                 </td></tr><tr><td class="number">17</td><td>        <a href="http://www.allegro.cc/manual/hline" target="_blank"><span class="a">hline</span></a><span class="k2">(</span>b,<span class="n">0</span>,<span class="n">190</span>,<span class="n">320</span>,<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="k2">)</span><span class="k2">;</span>   </td></tr><tr><td class="number">18</td><td>        <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>b,<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>,<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">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>&#160;</td></tr><tr><td class="number">22</td><td><span class="k1">void</span> updateInput<span class="k2">(</span><span class="k1">struct</span> S_Player<span class="k3">*</span>p<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">23</td><td>     </td></tr><tr><td class="number">24</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> <span class="k2">{</span></td></tr><tr><td class="number">25</td><td>         p-&gt;key <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>         p-&gt;current<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>               </td></tr><tr><td class="number">27</td><td>         <span class="k1">if</span> <span class="k2">(</span>p-&gt;current <span class="k3">&gt;</span> <span class="n">5</span><span class="k2">)</span> p-&gt;current <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>         p-&gt;x <span class="k3">+</span><span class="k3">=</span> p-&gt;playerspeed <span class="k3">+</span> <span class="n">4</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>            </td></tr><tr><td class="number">30</td><td>     <span class="k2">}</span> <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_LEFT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">31</td><td>            </td></tr><tr><td class="number">32</td><td>         p-&gt;key <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>         p-&gt;current<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>               </td></tr><tr><td class="number">34</td><td>         <span class="k1">if</span> <span class="k2">(</span>p-&gt;current <span class="k3">&gt;</span> <span class="n">5</span><span class="k2">)</span> p-&gt;current <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>         p-&gt;x <span class="k3">+</span><span class="k3">=</span> <span class="k3">-</span>p-&gt;playerspeed <span class="k3">-</span> <span class="n">4</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>         </td></tr><tr><td class="number">37</td><td>     <span class="k2">}</span> <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>  </td></tr><tr><td class="number">38</td><td>         </td></tr><tr><td class="number">39</td><td>         p-&gt;current <span class="k3">=</span> <span class="n">7</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>         </td></tr><tr><td class="number">41</td><td>     <span class="k2">}</span> <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_DOWN<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">42</td><td>         </td></tr><tr><td class="number">43</td><td>         p-&gt;current <span class="k3">=</span> <span class="n">8</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>                 </td></tr><tr><td class="number">45</td><td>     <span class="k2">}</span> <span class="k1">else</span> p-&gt;current <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>     </td></tr><tr><td class="number">46</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

the code is called in a while loop in main.c
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dothedru22)</author>
		<pubDate>Wed, 14 Jun 2006 07:33:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Keyframes, my friend. Keyframes. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> Fither that, or you want to increment p-&gt;current every 5 logic loops or something.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (23yrold3yrold)</author>
		<pubDate>Wed, 14 Jun 2006 08:17:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You should be using some kind of animation structure. Each frame should have it&#39;s own delay. Maybe something like this.</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>&#160;</td></tr><tr><td class="number">2</td><td>stuct Animation <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>    <span class="k1">int</span> num<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>    <span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">int</span> tick<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    <span class="k1">int</span> frame<span class="k2">;</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>Animation <span class="k3">*</span>createAnimation<span class="k2">(</span><span class="k1">int</span> num, <span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">10</td><td>    Animation <span class="k3">*</span>a <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>Animation<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    a-&gt;num <span class="k3">=</span> num<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>    a-&gt;delay <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>    a-&gt;tick <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    <span class="k1">return</span> a<span class="k2">;</span></td></tr><tr><td class="number">15</td><td><span class="k2">}</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td><span class="k1">void</span> updateAnimation<span class="k2">(</span>Animation <span class="k3">*</span>a<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">18</td><td>    <span class="k3">+</span><span class="k3">+</span> tick<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    <span class="k1">if</span> <span class="k2">(</span>tick <span class="k3">&gt;</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_128.html" target="_blank">delay</a><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">20</td><td>        tick <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>        <span class="k3">+</span><span class="k3">+</span> frame<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>        <span class="k1">if</span> <span class="k2">(</span>frame <span class="k3">&gt;</span><span class="k3">=</span> num<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">23</td><td>            frame <span class="k3">=</span> <span class="n">0</span><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="k2">}</span></td></tr><tr><td class="number">26</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Something like that. If you want more control over your animation, you can have an array of delays (a separate delay for each individual frame).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonny Cook)</author>
		<pubDate>Wed, 14 Jun 2006 08:51:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hey thanks for the replies so fast.  i like the idea you had Johnny.  I had tried something sortof of the same concept earlier without much luck.  It definatly works its just that the frames are really choppy.  I feel that when im doing that all im doing is creating a rest function.  Its almost the same thing.  But I appreciate the help so fast.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dothedru22)</author>
		<pubDate>Wed, 14 Jun 2006 09:12:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Each frame should have it&#39;s own delay.
</p></div></div><p>
Yeah, that&#39;s what I meant by &#39;keyframe&#39;; I should have elaborated. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (23yrold3yrold)</author>
		<pubDate>Wed, 14 Jun 2006 09:46: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 feel that when im doing that all im doing is creating a rest function. Its almost the same thing.
</p></div></div><p>

Almost, but not quite. With rest, the program exectution stops until rest returns. This would cause your game to appear to be laggy, which you certainly do not want. I&#39;ve used this method many times before (I believe it&#39;s quite standard), so it should work for you.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonny Cook)</author>
		<pubDate>Wed, 14 Jun 2006 09:54:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hmm well maybe its my implementation of it or something.  i changed mine to the way you did yours.  heres what i have</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> drawScreen<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> b, <span class="k1">struct</span> S_Player<span class="k3">*</span> p<span class="k2">)</span> <span class="k2">{</span>       </td></tr><tr><td class="number">2</td><td>          </td></tr><tr><td class="number">3</td><td>                                              </td></tr><tr><td class="number">4</td><td>        <span class="k1">while</span> <span class="k2">(</span>game_time <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span> </td></tr><tr><td class="number">5</td><td>              </td></tr><tr><td class="number">6</td><td>              game_time <span class="k3">-</span><span class="k3">-</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>              updateInput<span class="k2">(</span>p<span class="k2">)</span><span class="k2">;</span>  <span class="c">//Input </span></td></tr><tr><td class="number">8</td><td>        <span class="k2">}</span>                   </td></tr><tr><td class="number">9</td><td>        <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>b<span class="k2">)</span><span class="k2">;</span> </td></tr><tr><td class="number">10</td><td>                </td></tr><tr><td class="number">11</td><td>        <span class="k1">if</span> <span class="k2">(</span>p-&gt;key <span class="k3">=</span><span class="k3">=</span> <span class="n">0</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>            <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>b,p-&gt;img<span class="k2">[</span>p-&gt;current<span class="k2">]</span>,p-&gt;x,p-&gt;y<span class="k2">)</span><span class="k2">;</span>           </td></tr><tr><td class="number">14</td><td>             </td></tr><tr><td class="number">15</td><td>        <span class="k2">}</span> <span class="k1">else</span> <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>b,p-&gt;img<span class="k2">[</span>p-&gt;current<span class="k2">]</span>,p-&gt;x,p-&gt;y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>           </td></tr><tr><td class="number">17</td><td>               </td></tr><tr><td class="number">18</td><td>        <a href="http://www.allegro.cc/manual/hline" target="_blank"><span class="a">hline</span></a><span class="k2">(</span>b,<span class="n">0</span>,<span class="n">190</span>,<span class="n">320</span>,<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="k2">)</span><span class="k2">;</span>   </td></tr><tr><td class="number">19</td><td>    </td></tr><tr><td class="number">20</td><td>        <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>b,<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>,<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">21</td><td><span class="k2">}</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td><span class="k1">void</span> updateInput<span class="k2">(</span><span class="k1">struct</span> S_Player<span class="k3">*</span>p<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">24</td><td>     </td></tr><tr><td class="number">25</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> <span class="k2">{</span></td></tr><tr><td class="number">26</td><td>        </td></tr><tr><td class="number">27</td><td>         p-&gt;tick <span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>      </td></tr><tr><td class="number">28</td><td>         <span class="k1">if</span> <span class="k2">(</span>p-&gt;tick <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">4</span><span class="k2">)</span> <span class="k2">{</span>                 </td></tr><tr><td class="number">29</td><td>                          </td></tr><tr><td class="number">30</td><td>            p-&gt;key <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>            p-&gt;tick <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>            p-&gt;current<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>               </td></tr><tr><td class="number">33</td><td>           </td></tr><tr><td class="number">34</td><td>            <span class="k1">if</span> <span class="k2">(</span>p-&gt;current <span class="k3">&gt;</span> <span class="n">5</span><span class="k2">)</span> p-&gt;current <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>            </td></tr><tr><td class="number">36</td><td>            p-&gt;x <span class="k3">+</span><span class="k3">=</span> p-&gt;playerspeed <span class="k3">+</span> <span class="n">2</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>            </td></tr><tr><td class="number">39</td><td>     <span class="k2">}</span> <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_LEFT<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">40</td><td>                </td></tr><tr><td class="number">41</td><td>         p-&gt;tick <span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>         </td></tr><tr><td class="number">43</td><td>         <span class="k1">if</span> <span class="k2">(</span>p-&gt;tick <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">4</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">44</td><td>            p-&gt;key <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>            p-&gt;tick <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>      </td></tr><tr><td class="number">46</td><td>            p-&gt;current<span class="k3">+</span><span class="k3">+</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">if</span> <span class="k2">(</span>p-&gt;current <span class="k3">&gt;</span> <span class="n">5</span><span class="k2">)</span> p-&gt;current <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>            </td></tr><tr><td class="number">50</td><td>            p-&gt;x <span class="k3">+</span><span class="k3">=</span> <span class="k3">-</span>p-&gt;playerspeed <span class="k3">-</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>         <span class="k2">}</span> </td></tr><tr><td class="number">52</td><td>         </td></tr><tr><td class="number">53</td><td>     <span class="k2">}</span> <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>  </td></tr><tr><td class="number">54</td><td>         </td></tr><tr><td class="number">55</td><td>         p-&gt;current <span class="k3">=</span> <span class="n">7</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>         </td></tr><tr><td class="number">57</td><td>     <span class="k2">}</span> <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_DOWN<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">58</td><td>         </td></tr><tr><td class="number">59</td><td>         p-&gt;current <span class="k3">=</span> <span class="n">8</span><span class="k2">;</span></td></tr><tr><td class="number">60</td><td>                 </td></tr><tr><td class="number">61</td><td>     <span class="k2">}</span> <span class="k1">else</span> p-&gt;current <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>     </td></tr><tr><td class="number">62</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

</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 "player.h"</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="k1">struct</span> S_Player createPlayer<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>         </td></tr><tr><td class="number">6</td><td>         <span class="k1">struct</span> S_Player<span class="k3">*</span> player <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k1">struct</span> S_Player<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>         </td></tr><tr><td class="number">8</td><td>         player-&gt;dat <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">"image/sprite.dat"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>         </td></tr><tr><td class="number">10</td><td>         player-&gt;img<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <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>player-&gt;dat<span class="k2">[</span>stand<span class="k2">]</span>.dat<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>         player-&gt;img<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <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>player-&gt;dat<span class="k2">[</span>run1<span class="k2">]</span>.dat<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>         player-&gt;img<span class="k2">[</span><span class="n">2</span><span class="k2">]</span> <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>player-&gt;dat<span class="k2">[</span>run2<span class="k2">]</span>.dat<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>         player-&gt;img<span class="k2">[</span><span class="n">3</span><span class="k2">]</span> <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>player-&gt;dat<span class="k2">[</span>run3<span class="k2">]</span>.dat<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>         player-&gt;img<span class="k2">[</span><span class="n">4</span><span class="k2">]</span> <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>player-&gt;dat<span class="k2">[</span>run4<span class="k2">]</span>.dat<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>         player-&gt;img<span class="k2">[</span><span class="n">5</span><span class="k2">]</span> <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>player-&gt;dat<span class="k2">[</span>run5<span class="k2">]</span>.dat<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>         player-&gt;img<span class="k2">[</span><span class="n">6</span><span class="k2">]</span> <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>player-&gt;dat<span class="k2">[</span>run6<span class="k2">]</span>.dat<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>         player-&gt;img<span class="k2">[</span><span class="n">7</span><span class="k2">]</span> <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>player-&gt;dat<span class="k2">[</span>lookup<span class="k2">]</span>.dat<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>         player-&gt;img<span class="k2">[</span><span class="n">8</span><span class="k2">]</span> <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>player-&gt;dat<span class="k2">[</span>crouch<span class="k2">]</span>.dat<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>         player-&gt;x <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>         player-&gt;y <span class="k3">=</span> <span class="n">150</span><span class="k2">;</span>   </td></tr><tr><td class="number">21</td><td>         player-&gt;playerspeed <span class="k3">=</span> <span class="n">6</span><span class="k2">;</span></td></tr><tr><td class="number">22</td><td>         player-&gt;current <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> </td></tr><tr><td class="number">23</td><td>         player-&gt;key <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>         player-&gt;tick <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>         </td></tr><tr><td class="number">26</td><td>         <span class="k1">return</span> <span class="k3">*</span>player<span class="k2">;</span></td></tr><tr><td class="number">27</td><td><span class="k2">}</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td><span class="k1">void</span> deletePlayer<span class="k2">(</span><span class="k1">struct</span> S_Player<span class="k3">*</span> p<span class="k2">)</span> <span class="k2">{</span> </td></tr><tr><td class="number">30</td><td>     </td></tr><tr><td class="number">31</td><td>     <a href="http://www.allegro.cc/manual/unload_datafile" target="_blank"><span class="a">unload_datafile</span></a><span class="k2">(</span>p-&gt;dat<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>     <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>p<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>     </td></tr><tr><td class="number">34</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dothedru22)</author>
		<pubDate>Wed, 14 Jun 2006 10:21:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your createPlayer function is creating a memory leak, and your deletePlayer function is bugged. When you allocate something, you need to keep a pointer to it around so you can free it later. When you return *player, you&#39;re basically just copying out the data and getting rid of the pointer. And when calling deletePlayer, I assume you&#39;re using like you did before (ie. deletePlayer(&amp;something_on_the_stack);), meaning it&#39;s trying to free memory it can&#39;t.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Wed, 14 Jun 2006 11:57:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>so like i need a pointer to a function?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dothedru22)</author>
		<pubDate>Thu, 15 Jun 2006 00:30:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Either update using floats (i.e. a number less than 1) or use a timer and keep a delay variable with each object.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Thu, 15 Jun 2006 06:22:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
so like i need a pointer to a function?
</p></div></div><p>
No. You need a pointer to an object.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> S_Player <span class="k3">*</span>player <span class="k3">=</span> createPlayer<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
...
destroyPlayer<span class="k2">(</span>player<span class="k2">)</span><span class="k2">;</span>
player <span class="k3">=</span> NULL<span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Thu, 15 Jun 2006 07:32:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Either update using floats (i.e. a number less than 1)
</p></div></div><p>

thats a good idea. thanks.  it works but i have obviously type cast the array index to a integer every looop.  not sure if this will cause major slow down in the long run.  or if using a float in generals gonna cause much problem.  </p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
No. You need a pointer to an object.</p><p>struct S_Player *player = createPlayer();<br />...<br />destroyPlayer(player);<br />player = NULL;
</p></div></div><p>

not sure what your saying.  isnt that what i already have.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dothedru22)</author>
		<pubDate>Thu, 15 Jun 2006 08:50:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
not sure what your saying. isnt that what i already have.
</p></div></div><p>
No, because createPlayer doesn&#39;t return a pointer. I can&#39;t say for 100% certainty what you&#39;re doing though because you haven&#39;t showed the code since you updated the code. But if you have:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> S_Player player <span class="k3">=</span> createPlayer<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
...
destroyPlayer<span class="k2">(</span><span class="k3">&amp;</span>player<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
Then you have a memory leak, still have the player object on the stack, and try to free stack memory (all very bad).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Thu, 15 Jun 2006 08:55:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>oh i see.  thanks man.<br />well everytime i try what you had<br />struct S_Player* player = createPlayer();</p><p>i get a message saying i cant do that.  says something like imcompatable types.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dothedru22)</author>
		<pubDate>Thu, 15 Jun 2006 08:58:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Because createPlayer isn&#39;t returning a pointer. You need to make it return struct S_Player* instead of struct S_Player.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Thu, 15 Jun 2006 09:00:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>i thought that was sortof what i was doig when i said return *player.  im sorry just not getting it.  i&#39;ve tried a bunch of ways.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dothedru22)</author>
		<pubDate>Thu, 15 Jun 2006 09:06:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>return *player; means you&#39;re deferencing the player pointer, and copying it to the object you&#39;re setting in main(). return player; will copy the pointer value (which is what you want), but you have to define the function to return a pointer, and set a pointer in main(). eg:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">struct</span> S_Player <span class="k3">*</span>createPlayer<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k2">{</span>
    <span class="k1">struct</span> S_Player <span class="k3">*</span>player <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k1">struct</span> S_Player<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
    ...
    <span class="k1">return</span> player<span class="k2">;</span>
<span class="k2">}</span>

<span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
    ...
    <span class="k1">struct</span> S_Player <span class="k3">*</span>player <span class="k3">=</span> createPlayer<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    ...
    destroyPlayer<span class="k2">(</span>player<span class="k2">)</span><span class="k2">;</span>
    player <span class="k3">=</span> NULL<span class="k2">;</span>
    ...
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Thu, 15 Jun 2006 09:19:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>oh i see man.  not sure the theory behind it.  but it works now.  hopefully this weekend i&#39;ll read up on this more.  i thought i knew the language pretty well but i guess not.  i appreicate your help so fast.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dothedru22)</author>
		<pubDate>Thu, 15 Jun 2006 09:27:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you need any further information/examples on coding your animations, download and check out the code for the animation part of my library mentioned in my sig. all the code is handled in the method, &#39;nextframe&#39;.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Thu, 15 Jun 2006 17:13:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If all else fails, you could play the same frame twice, effectively cutting the FPS in half <b>shrugs</b>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matt Kindy)</author>
		<pubDate>Fri, 16 Jun 2006 01:48:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s exactly what a frame delay accomplishes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonny Cook)</author>
		<pubDate>Fri, 16 Jun 2006 01:57:59 +0000</pubDate>
	</item>
</rss>
