<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Would like some help with jittering</title>
		<link>http://www.allegro.cc/forums/view/595735</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 09 Apr 2008 18:03:59 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I seem to be having a problem getting my pong game (well not much of a game at this point) to render smoothly.  I am using triple buffering and a timed loop but the ball seems to jitter as it moves but I don&#39;t have any flickering or tearing.  I have tried slowing down/speeding up my logic fps but that doesn&#39;t seem to have any effect.   The faster the computer the worse the jittering.  I am using the triple buffer example as a guide for my ScreenBuffer class and the basic timed game loop in the Allegro FAQ for my run method in Pong.cpp.</p><p>Here&#39;s the relevant code.  I have a Pong class that handles the game, a ScreenBuffer class that takes care of the triple buffering and a Ball class (subclass of GameObject) that is the ball.  Right now all I have is a single ball that bounces around the screen.</p><p>Any help would be appreciated.  Thanks.</p><p>Pong.cpp
</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">volatile</span> <span class="k1">int</span> g_speedCounter<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">4</td><td><span class="c">// incrementSpeedCounter</span></td></tr><tr><td class="number">5</td><td><span class="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">6</td><td><span class="k1">void</span> incrementSpeedCounter<span class="k2">(</span><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>   g_speedCounter<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><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>incrementSpeedCounter<span class="k2">)</span></td></tr><tr><td class="number">11</td><td><span class="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">12</td><td><span class="c">// Pong::run</span></td></tr><tr><td class="number">13</td><td><span class="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">14</td><td><span class="k1">void</span> Pong::run<span class="k2">(</span><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>  <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>g_speedCounter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>incrementSpeedCounter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>  <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>incrementSpeedCounter, BPS_TO_TIMER<span class="k2">(</span><span class="n">50</span><span class="k2">)</span><span class="k2">)</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="k1">do</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">while</span> <span class="k2">(</span>g_speedCounter <span class="k3">&gt;</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>      gameUpdate<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>      g_speedCounter--<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>    render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>&#160;</td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>  <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</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></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">//---------------------------------------------------------</span></td></tr><tr><td class="number">34</td><td><span class="c">// Pong::render</span></td></tr><tr><td class="number">35</td><td><span class="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">36</td><td><span class="k1">void</span> Pong::render<span class="k2">(</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>  <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> NULL<span class="k2">;</span></td></tr><tr><td class="number">39</td><td>  </td></tr><tr><td class="number">40</td><td>  buffer <span class="k3">=</span> m_screenBuffer-&gt;getBuffer<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>  </td></tr><tr><td class="number">42</td><td>  <span class="k1">if</span><span class="k2">(</span>buffer<span class="k2">)</span></td></tr><tr><td class="number">43</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">44</td><td>    <a href="http://www.allegro.cc/manual/acquire_bitmap" target="_blank"><span class="a">acquire_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">45</td><td>    </td></tr><tr><td class="number">46</td><td>    <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>    </td></tr><tr><td class="number">47</td><td>&#160;</td></tr><tr><td class="number">48</td><td>    m_ball-&gt;draw<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>&#160;</td></tr><tr><td class="number">50</td><td>    <a href="http://www.allegro.cc/manual/release_bitmap" target="_blank"><span class="a">release_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>    </td></tr><tr><td class="number">52</td><td>    m_screenBuffer-&gt;flip<span class="k2">(</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>  <span class="k1">else</span></td></tr><tr><td class="number">55</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">56</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">"triple buffer error"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">57</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">58</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

GameObject.cpp (Ball is a sub-class)
</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="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">2</td><td><span class="c">//GameObject::loadImage</span></td></tr><tr><td class="number">3</td><td><span class="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">4</td><td><span class="k1">int</span> GameObject::loadImage<span class="k2">(</span>string sFile<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="k1">int</span> result <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span></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> temp <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>sFile.c_str<span class="k2">(</span><span class="k2">)</span>,NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  m_image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_bitmap</span></a><span class="k2">(</span>temp-&gt;w, temp-&gt;h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>temp,m_image,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,temp-&gt;w,temp-&gt;h<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>  <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></td></tr><tr><td class="number">12</td><td>  </td></tr><tr><td class="number">13</td><td>  <span class="k1">if</span><span class="k2">(</span>m_image<span class="k2">)</span></td></tr><tr><td class="number">14</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">15</td><td>    result <span class="k3">=</span> SUCCESS<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>  <span class="k1">return</span> result<span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

ScreenBuffer.cpp
</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="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">2</td><td><span class="c">// ScreenBuffer::ScreenBuffer()</span></td></tr><tr><td class="number">3</td><td><span class="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">4</td><td>ScreenBuffer::ScreenBuffer<span class="k2">(</span><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>  m_bTripleBuffer<span class="k3">=</span><span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  </td></tr><tr><td class="number">8</td><td>  m_currentPage <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>  <span class="k1">if</span><span class="k2">(</span>enableTripleBuffering<span class="k2">(</span><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>    m_numPages <span class="k3">=</span> <span class="n">3</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">14</td><td>  <span class="k1">else</span></td></tr><tr><td class="number">15</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">16</td><td>    m_numPages <span class="k3">=</span> <span class="n">2</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>&#160;</td></tr><tr><td class="number">19</td><td>  m_bufferPages <span class="k3">=</span> <span class="k1">new</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>m_numPages<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>   </td></tr><tr><td class="number">21</td><td>  <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>m_numPages<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</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>    m_bufferPages<span class="k3">&lt;</span>i&gt; <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_video_bitmap" target="_blank"><span class="a">create_video_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">24</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">25</td><td>  </td></tr><tr><td class="number">26</td><td>  <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>m_bufferPages<span class="k2">[</span>m_currentPage<span class="k2">]</span><span class="k2">)</span><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><span class="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">29</td><td><span class="c">// ScreenBuffer::enableTripleBuffering()</span></td></tr><tr><td class="number">30</td><td><span class="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">31</td><td><span class="k1">bool</span> ScreenBuffer::enableTripleBuffering<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">//try to enable triple buffering</span></td></tr><tr><td class="number">34</td><td>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/gfx_capabilities" target="_blank"><span class="a">gfx_capabilities</span></a> <span class="k3">&amp;</span> GFX_CAN_TRIPLE_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>    <a href="http://www.allegro.cc/manual/enable_triple_buffer" target="_blank"><span class="a">enable_triple_buffer</span></a><span class="k2">(</span><span class="k2">)</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="c">//make sure it worked</span></td></tr><tr><td class="number">40</td><td>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/gfx_capabilities" target="_blank"><span class="a">gfx_capabilities</span></a> <span class="k3">&amp;</span> GFX_CAN_TRIPLE_BUFFER<span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">41</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">42</td><td>    m_bTripleBuffer <span class="k3">=</span> FALSE<span class="k2">;</span></td></tr><tr><td class="number">43</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">44</td><td>  <span class="k1">else</span></td></tr><tr><td class="number">45</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">46</td><td>    m_bTripleBuffer <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">48</td><td>  </td></tr><tr><td class="number">49</td><td>  <span class="k1">return</span> m_bTripleBuffer<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><span class="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">52</td><td><span class="c">// ScreenBuffer::flip</span></td></tr><tr><td class="number">53</td><td><span class="c">//---------------------------------------------------------</span></td></tr><tr><td class="number">54</td><td><span class="k1">void</span> ScreenBuffer::flip<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">55</td><td><span class="k2">{</span></td></tr><tr><td class="number">56</td><td>  <span class="c">//make sure last flip happened</span></td></tr><tr><td class="number">57</td><td>  <span class="k1">do</span><span class="k2">{</span><span class="k2">}</span><span class="k1">while</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/poll_scroll" target="_blank"><span class="a">poll_scroll</span></a><span class="k2">(</span><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>  <span class="c">//post a request to display new image</span></td></tr><tr><td class="number">60</td><td>  <a href="http://www.allegro.cc/manual/request_video_bitmap" target="_blank"><span class="a">request_video_bitmap</span></a><span class="k2">(</span>m_bufferPages<span class="k2">[</span>m_currentPage<span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">61</td><td>  </td></tr><tr><td class="number">62</td><td>  <span class="c">//point to next page</span></td></tr><tr><td class="number">63</td><td>  m_currentPage <span class="k3">=</span> <span class="k2">(</span>m_currentPage<span class="k3">+</span><span class="n">1</span><span class="k2">)</span>%m_numPages<span class="k2">;</span></td></tr><tr><td class="number">64</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Cain)</author>
		<pubDate>Thu, 27 Mar 2008 08:44:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It seems you are using video bitmaps. Have you tried with memory bitmaps?.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kenmasters1976)</author>
		<pubDate>Sat, 29 Mar 2008 00:20:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>For the ball object or the buffers?  As far as I know for triple buffering to work they need to be video bitmaps.  I tried both video and memory bitmaps for the ball and it didn&#39;t make a difference.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Cain)</author>
		<pubDate>Sat, 29 Mar 2008 03:05:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are you using Windows?</p><p>I&#39;m not sure if this is an issue any more, but code like this used to misbehave on Windows:
</p><div class="source-code snippet"><div class="inner"><pre>    <a href="http://www.allegro.cc/manual/acquire_bitmap" target="_blank"><span class="a">acquire_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>  
    <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>    
    m_ball-&gt;draw<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/release_bitmap" target="_blank"><span class="a">release_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
    m_screenBuffer-&gt;flip<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

The clear would actually end up releasing the bitmap and everything from then on would be slow as Allegro had to keep locking the bitmap again.<br />Try this and see if it speeds up:
</p><div class="source-code snippet"><div class="inner"><pre>    <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>buffer,<a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/acquire_bitmap" target="_blank"><span class="a">acquire_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>      
    m_ball-&gt;draw<span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/release_bitmap" target="_blank"><span class="a">release_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
    m_screenBuffer-&gt;flip<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (amber)</author>
		<pubDate>Sat, 29 Mar 2008 07:00:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I tried that but it didn&#39;t seem to make a difference.</p><p>I think the problem is with the timing in my run method.  I took the timing out and then it ran really smooth, but obviously I need to have a timing loop so I&#39;ll have to come up with something else.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Cain)</author>
		<pubDate>Sat, 29 Mar 2008 23:32:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello,<br />Take heed of the manual for acquire_bitmap()
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
You never need to call the function explicitly as it is low level, and will only give you a speed up if you know what you are doing. Using it wrongly may cause slowdown, or even lock up your program.
</p></div></div><p>

You don&#39;t use acquire_bitmap when you are doing vram to vram calls. i.e. take out your acquire bitmap call if you have achieved and are using paging/triple buffering and video bitmaps, which is what you are doing.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Sun, 30 Mar 2008 05:01:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I think the problem is with the timing in my run method. I took the timing out and then it ran really smooth, but obviously I need to have a timing loop so I&#39;ll have to come up with something else.
</p></div></div><p>

Allegro&#39;s timers are not that good. If you really want a smooth game you will have to resort to high performance timers which are platform specific. High performance timers have been discussed here before. I ran <a href="http://www.allegro.cc/forums/search?keywords=performance+timer&amp;member_name=&amp;member_name_id=null+&amp;order=rel&amp;forum_all=1">this search</a> and got some good results.</p><p>Edit: I hear Allegro 5 has much better timers but it is not nearly complete yet.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Sun, 30 Mar 2008 07:32:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Todd, I&#39;ll look into it.</p><p>The problem is definitely the timers.  I disabled them and it ran great on my laptop because it&#39;s a rather slow machine, but on my desktop the game is unplayable because the logic loop is not regulated so the ball just flies around the screen but at least it&#39;s smooth...heh.</p><p>If the refresh rate is 60Hz should the logic be lower, equal or higher, or does it really matter as long as it&#39;s (relatively) consistent?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Cain)</author>
		<pubDate>Mon, 31 Mar 2008 02:43:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
If the refresh rate is 60Hz should the logic be lower, equal or higher, or does it really matter as long as it&#39;s (relatively) consistent?
</p></div></div><p>

I use 60hz timers with all my games and they run smooth even if the monitor&#39;s refresh rate isn&#39;t the same. It works similarly to how 24fps movies are played on 30fps televisions. You should be able to use whatever logic rate you want but I haven&#39;t tried anything other than 60hz and 100hz.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Todd Cope)</author>
		<pubDate>Mon, 31 Mar 2008 05:52:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>you could always call request_refresh_rate(gamefps);</p><p>remember about removing acquire_bitmap as well when using video bitmaps...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Wed, 02 Apr 2008 23:02:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I removed the acquire/release bitmap functions but still have the issue.  I&#39;ve provided a link to the source code and a compiled exe(alleg42.dll not included) if anyone wants to look at it to see what I mean.  Pressing any key will exit the game as I have not implemented in the input routine yet.  The timing I&#39;m using is basically the one from the FAQ which is obviously not good enough so I&#39;ll have to find a better routine.  I did a search on the forums and tried a few different ones that I came across but nothing seems to work.</p><p>I was playing Diablo the other day and it ran great on my computer which makes me wonder what they did to get things to run nice and smooth even on machines that are much faster than it was designed for.  I&#39;m sure their code is optimized for windows which seems like what I&#39;ll need to do to get my simple Pong game to work.</p><p>The way I&#39;m looking at it is if I can&#39;t get pong to run smoothly then there&#39;s not much hope for more complex games...heh.</p><p><a href="http://www.spiritsofwar.com//troy/Pong.zip">http://www.spiritsofwar.com//troy/Pong.zip</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Cain)</author>
		<pubDate>Wed, 09 Apr 2008 04:40:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I was playing Diablo the other day and it ran great on my computer which makes me wonder what they did to get things to run nice and smooth
</p></div></div><p>
Probably Blizzard&#39;s mind control plugin, because Diablo 2&#39;s logic and drawing are capped at 25fps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Wed, 09 Apr 2008 05:41:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was actually referring to Diablo 1...but yeah it wouldn&#39;t surprise me if they had some sort of subliminal mind control stuff going on.  <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Cain)</author>
		<pubDate>Wed, 09 Apr 2008 06:18:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Just compiled your code (the .exe you provided didn&#39;t work). My guess is that your problem is indeed the resolution of Allegro timers, that&#39;s why the ball jitters. You&#39;ll have to find another way for timing your game.</p><p>Also, on a side note, you do a lot of checks, but you don&#39;t handle them correctly... when running your program it may show messages indicating that something didn&#39;t work but yet it crashes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kenmasters1976)</author>
		<pubDate>Wed, 09 Apr 2008 06:33:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah I know I&#39;m not using all my checks properly, I just haven&#39;t gotten around to doing all the error checking.  I actually haven&#39;t touch the game for a while until last night when I have nothing else to do.</p><p>I&#39;ll keep looking around and trying out new stuff for timing.  Thanks for looking at it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Cain)</author>
		<pubDate>Wed, 09 Apr 2008 16:30:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>25 fps can be smooth.  Disney cartoons are 12 fps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matt Smith)</author>
		<pubDate>Wed, 09 Apr 2008 18:03:59 +0000</pubDate>
	</item>
</rss>
