<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Game Loop</title>
		<link>http://www.allegro.cc/forums/view/612179</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 19 Mar 2013 09:13:11 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi All</p><p>I&#39;m hoping someone can clarify the pros and cons of two different game loop styles.</p><p>The first one, and the one I&#39;ve only used, is to have a fancy while loop that makes logic run at a predetermined FPS and then have the rendering take up what ever time is left over:</p><p>(Taken from <a href="http://www.koonsolo.com/news/dewitters-gameloop/">http://www.koonsolo.com/news/dewitters-gameloop/</a>)
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">const</span> <span class="k1">int</span> TICKS_PER_SECOND <span class="k3">=</span> <span class="n">25</span><span class="k2">;</span>
<span class="number">  2</span>    <span class="k1">const</span> <span class="k1">int</span> SKIP_TICKS <span class="k3">=</span> <span class="n">1000</span> <span class="k3">/</span> TICKS_PER_SECOND<span class="k2">;</span>
<span class="number">  3</span>    <span class="k1">const</span> <span class="k1">int</span> MAX_FRAMESKIP <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>    DWORD next_game_tick <span class="k3">=</span> GetTickCount<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>    <span class="k1">int</span> loops<span class="k2">;</span>
<span class="number">  7</span>    <span class="k1">float</span> interpolation<span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>    <span class="k1">bool</span> game_is_running <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 10</span>    <span class="k1">while</span><span class="k2">(</span> game_is_running <span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 11</span>
<span class="number"> 12</span>        loops <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 13</span>        <span class="k1">while</span><span class="k2">(</span> GetTickCount<span class="k2">(</span><span class="k2">)</span> <span class="k3">&gt;</span> next_game_tick <span class="k3">&amp;</span><span class="k3">&amp;</span> loops <span class="k3">&lt;</span> MAX_FRAMESKIP<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>            update_game<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>            next_game_tick <span class="k3">+</span><span class="k3">=</span> SKIP_TICKS<span class="k2">;</span>
<span class="number"> 17</span>            loops<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 18</span>        <span class="k2">}</span>
<span class="number"> 19</span>
<span class="number"> 20</span>        interpolation <span class="k3">=</span> <span class="k1">float</span><span class="k2">(</span> GetTickCount<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> SKIP_TICKS <span class="k3">-</span> next_game_tick <span class="k2">)</span>
<span class="number"> 21</span>                        <span class="k3">/</span> <span class="k1">float</span><span class="k2">(</span> SKIP_TICKS <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>        display_game<span class="k2">(</span> interpolation <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>    <span class="k2">}</span>
</div></div><p>

The other way which I have not tried, but have heard of people doing is an event driven &quot;game loop&quot;.  The way I understand it is you set up a bunch of timers.  One for rendering, one for updating the logic, and one/some for getting input.</p><p>Can someone explain the pros and cons of each?  Also which style is best suited for what style of game?</p><p>Thanks<br />Adam.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (adamk kromm)</author>
		<pubDate>Fri, 08 Mar 2013 23:55:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The best way is to separate logic from drawing; do your logic every loop, but only draw if it&#39;s time to draw. This forum is <b>FULL</b> of examples, I&#39;m sure one of the other guys will post a link for you.</p><p>But ultimately, ALWAYS separate logic from drawing.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Sat, 09 Mar 2013 06:08:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/612179/978171#target">Dizzy Egg</a> said:</div><div class="quote"><p>
But ultimately, ALWAYS separate logic from drawing.
</p></div></div><p>

I think they are separate in the example code- <span class="source-code">update_game<span class="k2">(</span><span class="k2">)</span></span> would do the logic, and <span class="source-code">display_game<span class="k2">(</span>interpolation<span class="k2">)</span></span> would do the drawing.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/612179/978153#target">adamk kromm</a> said:</div><div class="quote"><p>
Can someone explain the pros and cons of each? Also which style is best suited for what style of game?
</p></div></div><p>

Someone should correct me if I&#39;m wrong, but I believe one major pro of an event-driven system would be that it would be easier to adapt to using multiple threads. Another pro is that timing of certain events would be more accurate than if you were to use a typical game loop.</p><p>For example, in a typical game loop, if <span class="source-code">update_game</span> takes a particularly long time to spawn objects, load data, or communicate over a network, the call to <span class="source-code">display_game</span> could potentially be later than you want it to be.</p><p>Most of the time though, I think the two methods are pretty much equally valid. I don&#39;t think either is suited to any particular type of game more than any other type of game.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Schyfis)</author>
		<pubDate>Sat, 09 Mar 2013 06:49:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/612179/978153#target">adamk kromm</a> said:</div><div class="quote"><p> The way I understand it is you set up a bunch of timers.  One for rendering, one for updating the logic, and one/some for getting input.</p></div></div><p>This seems insane, I don&#39;t know if anybody really does it like that. The event driven loops generally seen for A5 involve a single timer and are fundamentally the same to the game loop you posted. Once you add interpolation, they become practically identical:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>  <span class="k1">const</span> <span class="k1">int</span> MAX_FRAMESKIP <span class="k3">=</span> <span class="n">5</span><span class="k2">;</span>
<span class="number">  2</span>  <span class="k1">const</span> <span class="k1">float</span> FPS <span class="k3">=</span> <span class="n">25</span><span class="k2">;</span>
<span class="number">  3</span>  <span class="k1">const</span> <span class="k1">float</span> dt <span class="k3">=</span> <span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> FPS<span class="k2">;</span>
<span class="number">  4</span>  
<span class="number">  5</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span> t <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span>dt<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>q, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>t<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>t<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>  
<span class="number">  9</span>  <span class="k1">float</span> game_time <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 10</span>  <span class="k1">float</span> offset <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>  
<span class="number"> 12</span>  <span class="k1">bool</span> game_is_running <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 13</span>  <span class="k1">while</span><span class="k2">(</span>game_is_running<span class="k2">)</span>
<span class="number"> 14</span>  <span class="k2">{</span>
<span class="number"> 15</span>    <span class="k1">int</span> loops <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 16</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> e<span class="k2">;</span>
<span class="number"> 17</span>    <span class="k1">while</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_next_event"><span class="a">al_get_next_event</span></a><span class="k2">(</span>q, <span class="k3">&amp;</span>e<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 18</span>    <span class="k2">{</span>
<span class="number"> 19</span>      <span class="k1">if</span><span class="k2">(</span>e.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 20</span>      <span class="k2">{</span>
<span class="number"> 21</span>        game_time <span class="k3">=</span> e.timer.count <span class="k3">*</span> dt<span class="k2">;</span>
<span class="number"> 22</span>        
<span class="number"> 23</span>        update_game<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>        
<span class="number"> 25</span>        loops<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 26</span>        <span class="k1">if</span><span class="k2">(</span>loops <span class="k3">&gt;</span><span class="k3">=</span> MAX_FRAMESKIP<span class="k2">)</span>
<span class="number"> 27</span>          <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 28</span>      <span class="k2">}</span>
<span class="number"> 29</span>    <span class="k2">}</span>
<span class="number"> 30</span>    
<span class="number"> 31</span>    <span class="k1">float</span> interpolation <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> offset <span class="k3">-</span> game_time<span class="k2">)</span> <span class="k3">/</span> dt<span class="k2">;</span>
<span class="number"> 32</span>
<span class="number"> 33</span>    display_game<span class="k2">(</span>interpolation<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>  <span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sat, 09 Mar 2013 08:03:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>One thing I&#39;ve noticed, not sure if it is just me, but beginners seem to have problems with what constitutes game logic. I remember that my first game I coded (back in 2006 if I remember right) I had put some game logic in my drawing routines and I&#39;ve seen it done a lot being on here, Cplusplus.com, gamedev.net, and cprogramming.com. In my case I just threw it where ever just to get it working and never thought about the placement of it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Specter Phoenix)</author>
		<pubDate>Sat, 09 Mar 2013 08:38:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Since the OP asked explicitly: there&#39;s only one hiatus in that article: it assumes the logic to generally finish in time. When you have complicated logic f.i. 3D collisions, that condition might not hold true on slow hardware. (Kind of depends on what kind of hardware range you want to target.) So that&#39;s only important in real-time action games with complicated physics<span class="ref"><sup>[<a href="#">1</a>]</sup></span> on hardware where you can expect the logic to take more than a frame&#39;s time for multiple frames.<br />These considerations are very small, but I always like to get detailed. In the example&#39;s case the input is bound to the logic. If the input is polled, you can miss some inputs, if the logic should fall behind. Also game time will get stretched relative to real time, which might make it hard to time input. So considerations for action oriented games only; and even then the problems are not fully avoidable.<br />The event oriented approach has the benefit that you don&#39;t miss any input<span class="ref"><sup>[<a href="#">2</a>]</sup></span>. Keyboard and mouse input can be received as events independently<span class="ref"><sup>[<a href="#">3</a>]</sup></span> of a timer.It has the disadvantage that you have to filter the input yourself in the worst case scenario.
</p><div class="ref-block"><h2>References</h2><ol><li>I&#39;ve never heard of any game with such complicated game mechanics that weren&#39;t somehow based on real physics.</li><li>The other game loop doesn&#39;t necessarily use a polled input system, but with an event-driven loop it&#39;s integrated.</li><li>They still have a time stamp, and can be chronolized.</li></ol></div></div>]]>
		</description>
		<author>no-reply@allegro.cc (weapon_S)</author>
		<pubDate>Sat, 09 Mar 2013 14:34:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi</p><p>Thanks for the replies.  For some reason I thought the two methods where significantly different in purpose.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (adamk kromm)</author>
		<pubDate>Tue, 12 Mar 2013 23:29:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m trying to wrap my head around game loop designs in event-based Allegro 5.  I adapted the <a href="http://wiki.allegro.cc/index.php?title=Allegro_5_Tutorial/Bitmaps">A5 Tutorial &quot;Bouncer&quot; example</a> with the game loop with interpolation algorithm SiegeLord posted (code attached).  In the adapted example, a purple box that moves diagonally, bouncing when it hits the edge of the display, I get pretty smooth motion regardless of vertical refresh rate or vsync being enabled or not.  Though when the bitmap changes direction abruptly (at the edges of the screen), the motion hiccups, obviously because the interpolation presumes the bitmap&#39;s direction will proceed when in fact on the next logic loop the direction changes.  Is that just a limitation of using interpolation?  It seems to be that &quot;extrapolation&quot; would be more accurate term, or perhaps I&#39;m just thinking about it incorrectly or implemented it incorrectly?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (myoung)</author>
		<pubDate>Mon, 18 Mar 2013 07:10:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/612179/978702#target">myoung</a> said:</div><div class="quote"><p> implemented it incorrectly
</p></div></div><p>This. You coded the algorithm to perform extrapolation instead of interpolation, hence your issues. The general algorithm tends to assume that you are interpolating between the current position and the position one game tick in the past. Your code interpolates between the current position and one game tick into the future (sort of, as it assumes linear motion will persist into the future), thus making it perform extrapolation.</p><p>Additionally interpolation game loops tend to store the old position etc. explicitly, instead of assuming any sort of relationship between position and velocity. This way your object will be less likely to display in a position it was never actually in. It also obviates the treatment of teleportation.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 18 Mar 2013 09:07:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah!  I figured it out.  Changed this...</p><p><span class="source-code">flux_capacitor<span class="k2">(</span><span class="k1">int</span> gigawatts<span class="k2">)</span></span></p><p>...to this...</p><p><span class="source-code">flux_capacitor<span class="k2">(</span><span class="k1">double</span> gigawatts<span class="k2">)</span></span></p><p>But really... I stored the previous x and y positions of the object before they are updated in the game logic code block, and draw the object at...</p><p>previous position + (current position - previous position) * interpolation value.  </p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>game_done<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>
<span class="number">  3</span>  <span class="k1">int</span> loops <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  4</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>  <span class="k1">while</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_next_event"><span class="a">al_get_next_event</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  7</span>
<span class="number">  8</span>    <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  9</span>      game_done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 10</span>    <span class="k2">}</span>
<span class="number"> 11</span>
<span class="number"> 12</span>    <span class="k1">if</span> <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>      game_time <span class="k3">=</span> ev.timer.count <span class="k3">*</span> dt<span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>      <span class="c">//update game</span>
<span class="number"> 16</span>      <span class="k1">if</span><span class="k2">(</span>bouncer_x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> bouncer_x <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/SCREEN_W"><span class="a">SCREEN_W</span></a> <span class="k3">-</span> BOUNCER_SIZE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>        bouncer_dx <span class="k3">=</span> <span class="k3">-</span>bouncer_dx<span class="k2">;</span>
<span class="number"> 18</span>      <span class="k2">}</span>
<span class="number"> 19</span> 
<span class="number"> 20</span>      <span class="k1">if</span><span class="k2">(</span>bouncer_y <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> bouncer_y <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/SCREEN_H"><span class="a">SCREEN_H</span></a> <span class="k3">-</span> BOUNCER_SIZE<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 21</span>        bouncer_dy <span class="k3">=</span> <span class="k3">-</span>bouncer_dy<span class="k2">;</span>
<span class="number"> 22</span>      <span class="k2">}</span>
<span class="number"> 23</span> 
<span class="number"> 24</span>      bouncer_px <span class="k3">=</span> bouncer_x<span class="k2">;</span>
<span class="number"> 25</span>      bouncer_py <span class="k3">=</span> bouncer_y<span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>      bouncer_x <span class="k3">+</span><span class="k3">=</span> bouncer_dx<span class="k2">;</span>
<span class="number"> 28</span>      bouncer_y <span class="k3">+</span><span class="k3">=</span> bouncer_dy<span class="k2">;</span>
<span class="number"> 29</span>      <span class="c">// done updating game</span>
<span class="number"> 30</span>        
<span class="number"> 31</span>      loops<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 32</span>      <span class="k1">if</span> <span class="k2">(</span>loops <span class="k3">&gt;</span><span class="k3">=</span> MAX_FRAMESKIP<span class="k2">)</span>
<span class="number"> 33</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 34</span>    <span class="k2">}</span>
<span class="number"> 35</span>  <span class="k2">}</span>
<span class="number"> 36</span>    
<span class="number"> 37</span>  <span class="k1">float</span> interpolation <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_time"><span class="a">al_get_time</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> offset <span class="k3">-</span> game_time<span class="k2">)</span> <span class="k3">/</span> dt<span class="k2">;</span>
<span class="number"> 38</span>
<span class="number"> 39</span>  <span class="c">//display game with interpolation</span>
<span class="number"> 40</span>  <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</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>
<span class="number"> 41</span> 
<span class="number"> 42</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bouncer, bouncer_px <span class="k3">+</span> <span class="k2">(</span>bouncer_x <span class="k3">-</span> bouncer_px<span class="k2">)</span> <span class="k3">*</span> interpolation, bouncer_py <span class="k3">+</span> <span class="k2">(</span>bouncer_y <span class="k3">-</span> bouncer_py<span class="k2">)</span> <span class="k3">*</span> interpolation, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span> 
<span class="number"> 44</span>  <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>  <span class="c">// done displaying game</span>
<span class="number"> 46</span><span class="k2">}</span>
</div></div><p>

Still not sure if I&#39;m correct, though that yields the same smooth motion without drawing objects where they perhaps shouldn&#39;t be drawn.  I suppose adding some user controlled objects will make it clear if I now have it correct or if I&#39;m rendering in the past.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (myoung)</author>
		<pubDate>Mon, 18 Mar 2013 10:39:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Didn&#39;t <a href="http://www.koonsolo.com/news/dewitters-gameloop/">the linked article</a> actually do extrapolation and named it wrong? It&#39;s not a bizarre thing to do, given that the thing you display is one frame behind otherwise. It does have inconsistencies then, though.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (weapon_S)</author>
		<pubDate>Mon, 18 Mar 2013 19:51:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I guess I&#39;d have to try it on a non-trivial example, but I don&#39;t think the artifacts make it worth using extrapolation. The whole point of using interpolation was to remove the artifacts, and if you&#39;re removing the jitter ones and replacing them with something that might look even worse... it seems odd to me. Interpolating on one game tick back doesn&#39;t seem to be so bad to me... at 60Hz it&#39;s 16ms lag... at 120Hz it&#39;s 8ms lag. The computers are very fast these days so upping the logic update rate would be my solution to dealing with this lag, rather than doing the questionable extrapolation.</p><p>That said, the higher your logic rate the less need you have for any sort of interpolation at all... so, meh <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 18 Mar 2013 21:34:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>SiegeLord, thanks for posting that game loop code and for the further elaboration on the interpolation.  I re-worked the game loop of my first A5 creation using that interpolation method and with an only rare hiccup (maybe some other even on my system?) I get smooth as silk motion at any refresh rate with a fixed logic rate.  I don&#39;t really notice input latency with a 60Hz logic rate and faster than 60Hz is indeed no sweat on modern hardware and for what I&#39;ll be coding.  I would have been otherwise implementing delta time with variable logic rates, which I now see from another posting is a bad idea.  Now to trace it and actually understand what it&#39;s doing.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (myoung)</author>
		<pubDate>Tue, 19 Mar 2013 09:13:11 +0000</pubDate>
	</item>
</rss>
