<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Acceleration &amp; Deceleration </title>
		<link>http://www.allegro.cc/forums/view/615282</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 17 Apr 2015 04:11:13 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>After receiving some great advice and pointers from Chris on another thread I&#39;ve managed to code the very beginnings of my 2D top down car racer game.</p><p>At the moment I can load my sprite to the screen, move forward, backward, turn left and right and have the sprite rotate to face the direction it&#39;s heading.</p><p>I now want to add better acceleration and deceleration. Presently; <span class="source-code">object.speed</span> just increases by 0.2 while the UP key is pressed until it reaches <span class="source-code">object.maxSpeed</span></p><p>What would be a better way to implement acceleration?<br />I am calculating velocity like this:
</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>object.x <span class="k3">=</span> object.x <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.speed<span class="k2">;</span>
<span class="number"> 2</span>object.y <span class="k3">=</span> object.y <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.speed<span class="k2">;</span>
</div></div><p>

When the UP key is released the car just stops dead in it&#39;s tracks, which is no good of course. I thought by adding <span class="source-code">object.speed <span class="k3">*</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">8</span></span> to the key up event would solve this abrupt stopping of the car, it never <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /></p><p>So; can someone give advise on how to achieve this?</p><p>Thanks in advance guys <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Nortski)</author>
		<pubDate>Sun, 12 Apr 2015 21:37:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;d be good to do some reading up on derivatives/integrals and how they map to position, velocity, and acceleration.</p><p>Position is what you think. Velocity, is change in position for a given time. So if you&#39;re moving 10 feet, and your logic loop is 1 second, velocity is 10 feet per second. </p><p>So velocity is delta V / T. (Change in V per time)</p><p>And to use it in your game, you just do x += velocity every frame right?</p><p>Acceleration is just the change in velocity over a given time. </p><p>So acceleration is delta A / T. </p><p>And to use it in your game, you just do velocity += acceleration every frame!</p><p>So instead of setting velocity, you can do:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span> acceleration <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_DOWN<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>acceleration <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span> <span class="k1">if</span><span class="k2">(</span>acceleration <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>acceleration <span class="k3">=</span><span class="n">0</span><span class="k2">;</span><span class="k2">}</span>
velocity <span class="k3">+</span><span class="k3">=</span> acceleration<span class="k2">;</span>

<span class="c">//You can also make the car naturally slow down when you're not applying accel</span>
velocity <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">01</span><span class="k2">;</span> 
<span class="k1">if</span><span class="k2">(</span>velocity <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>velocity <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
</pre></div></div><p>

Lastly, FORCE is an acceleration. From newtons equation, force = mass * acceleration.</p><p>So if you factor in that a car has a mass, you can simulate a heavy or lighter car, and a beefier, or smaller engine easily.</p><p>Your engine is making a force. (Technically a force that changes per speed, which is why you have gears in a car, but you don&#39;t need that just yet!)</p><p>Your car has a mass. (mass is weight divided by earth&#39;s gravity)</p><p>So instead of directly applying acceleration, you apply FORCE. So if F=ma, then we can rearrange that to be a=f/m, acceleration is force divided by mass. Which passes the sanity test of &quot;car accelerates faster if we reduce the mass, or increase the engine force.&quot; </p><div class="source-code snippet"><div class="inner"><pre><span class="k1">float</span> engine_force <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span> <span class="c">//or whatever</span>
<span class="k1">float</span> car_mass <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>

<span class="c">//...</span>

<span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span>
<span class="k2">{</span>
acceleration <span class="k3">+</span><span class="k3">=</span> engine_force <span class="k3">/</span> car_mass<span class="k2">;</span> <span class="c">//a = f/m</span>
<span class="k2">}</span>
</pre></div></div><p>

That&#39;s it! </p><p>Now what about naturally slowing down? There&#39;s rolling resistance, and wind resistance. Rolling resistance is a function of the friction of everything rolling. Rolling resistance scales linearly with speed. Wind resistance is the same thing, but is the square of speed.</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//rolling resistance</span>
<span class="k1">float</span> rolling_resistance_factor <span class="k3">=</span> .<span class="n">1</span><span class="k2">;</span> <span class="c">//Some number. Best to just make one up.</span>
<span class="k1">float</span> rolling_resistance_force <span class="k3">=</span> velocity <span class="k3">*</span> rolling_resistance_factor<span class="k2">;</span>

car_acceleration <span class="k3">-</span><span class="k3">=</span> rolling_resistance_force <span class="k3">/</span> car_mass<span class="k2">;</span> <span class="c">//that's it!</span>

<span class="c">//wind</span>
<span class="k1">float</span> coefficient_of_drag <span class="k3">=</span> .<span class="n">01</span><span class="k2">;</span> <span class="c">//can look these up on wikipedia!</span>
<span class="k1">float</span> drag_force <span class="k3">=</span> <span class="k2">(</span>velocity <span class="k3">*</span> velocity<span class="k2">)</span> <span class="k3">*</span> coefficient_of_drag<span class="k2">;</span>

car_acceleration <span class="k3">-</span><span class="k3">=</span> drag_force <span class="k3">/</span> car_mass<span class="k2">;</span> <span class="c">//that's it!</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Sun, 12 Apr 2015 21:57:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You know when you get that feeling of biting off more than you can chew...... <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>Thanks for the great reply Chris, once again!</p><p>I think once I can grasp exactly what velocity is, this will make things a whole lot easier. My current velocity is stored in 2 variables:
</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>object.x <span class="k3">=</span> object.x <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.speed<span class="k2">;</span>
<span class="number"> 2</span>object.y <span class="k3">=</span> object.y <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.speed<span class="k2">;</span>
</div></div><p>

In your explanation you have velocity as a single variable, or do you? <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=";D" border="0" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Nortski)</author>
		<pubDate>Sun, 12 Apr 2015 22:33:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think it just looks more complex than it is.</p><p>Velocity is just your speed (or change in position over time)<br />Acceleration is just the change in velocity over time.</p><p>The rest of the stuff is just additional &quot;factors&quot; to determine the changes to apply to acceleration and velocity over time when you want to speed up or slow down. It makes it feel more &quot;natural&quot;.</p><p>In a racing game, you may actually make the car mass, or engine mass variable based on each car. More powerful cars may have larger engines, with greater mass, making their enertia greater, causing their acceleration to change slower.</p><p>You could even apply &quot;resistance&quot; to steering (to object.angle, so you&#39;d have an object.angle_accelleration or resistance something like that). Compare old american muscle cars or dragsters that have a very hard time turning, to rice rockets or super cars that can turn on a dime.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sun, 12 Apr 2015 22:42:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi Thomas, yes it will certainly be good to add steering resistance etc.</p><p>Firstly though, I need to get my head around this acceleration/deceleration concept.</p><p>I&#39;m having trouble implementing it into my code. I hate to ask but I think I need someone to point out exactly where in my code I would insert Chris&#39;s explanations. I think after that I should be able to work out the how&#39;s and why&#39;s of it all.</p><p>Here is my code (just using structs at the moment as I&#39;m a newbie):</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="p">#include &lt;allegro5\allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5\allegro_primitives.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5\allegro_image.h&gt;</span>
<span class="number">   4</span><span class="p">#include "objects.h"</span>
<span class="number">   5</span><span class="p">#include "math.h"</span>
<span class="number">   6</span>
<span class="number">   7</span><span class="c">//GLOBALS==============================</span>
<span class="number">   8</span><span class="k1">const</span> <span class="k1">int</span> WIDTH <span class="k3">=</span> <span class="n">1200</span><span class="k2">;</span>
<span class="number">   9</span><span class="k1">const</span> <span class="k1">int</span> HEIGHT <span class="k3">=</span> <span class="n">700</span><span class="k2">;</span>
<span class="number">  10</span><span class="k1">enum</span> KEYS<span class="k2">{</span>UP, DOWN, LEFT, RIGHT<span class="k2">}</span><span class="k2">;</span>
<span class="number">  11</span><span class="k1">bool</span> keys<span class="k2">[</span><span class="n">4</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  12</span>
<span class="number">  13</span><span class="c">//prototypes</span>
<span class="number">  14</span><span class="k1">void</span> InitCar<span class="k2">(</span>Car <span class="k3">&amp;</span>whiteCar, <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>car<span class="k2">)</span><span class="k2">;</span>
<span class="number">  15</span><span class="k1">void</span> DrawCar<span class="k2">(</span>Car <span class="k3">&amp;</span>whiteCar<span class="k2">)</span><span class="k2">;</span>
<span class="number">  16</span><span class="k1">void</span> MoveCarForward<span class="k2">(</span>Car <span class="k3">&amp;</span>whiteCar<span class="k2">)</span><span class="k2">;</span>
<span class="number">  17</span><span class="k1">void</span> MoveCarBackward<span class="k2">(</span>Car <span class="k3">&amp;</span>whiteCar<span class="k2">)</span><span class="k2">;</span>
<span class="number">  18</span>
<span class="number">  19</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  20</span><span class="k2">{</span>
<span class="number">  21</span>  <span class="c">//primitive variable</span>
<span class="number">  22</span>  <span class="k1">bool</span> done <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  23</span>  <span class="k1">float</span> steer <span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number">  24</span>  <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  25</span>  <span class="k1">int</span> FPS <span class="k3">=</span> <span class="n">60</span><span class="k2">;</span>
<span class="number">  26</span>  <span class="k1">float</span> acceleration <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number">  27</span>  
<span class="number">  28</span>
<span class="number">  29</span>  <span class="c">//object variables</span>
<span class="number">  30</span>  Car whiteCar<span class="k2">;</span>
<span class="number">  31</span>
<span class="number">  32</span>  <span class="c">//Allegro variables</span>
<span class="number">  33</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  34</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>event_queue <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  35</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  36</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>car <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  37</span>  
<span class="number">  38</span>
<span class="number">  39</span>  <span class="c">//Initialization Functions</span>
<span class="number">  40</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>                    <span class="c">//initialize Allegro</span>
<span class="number">  41</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  42</span>  display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number">  43</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>                    <span class="c">//test display object</span>
<span class="number">  44</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  45</span>
<span class="number">  46</span>  <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span>  <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  48</span>  <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  49</span>  
<span class="number">  50</span>  
<span class="number">  51</span>  event_queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  52</span>  timer <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><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  53</span>  car <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"objects/YellowCar.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>  
<span class="number">  55</span>  InitCar<span class="k2">(</span>whiteCar, car<span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span>
<span class="number">  57</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>event_queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</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>event_queue, <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>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</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>event_queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  60</span>
<span class="number">  61</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  62</span>
<span class="number">  63</span>  <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span>
<span class="number">  64</span>  <span class="k2">{</span>
<span class="number">  65</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">  66</span>    <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_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="number">  67</span>    
<span class="number">  68</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="number">  69</span>    <span class="k2">{</span>
<span class="number">  70</span>      done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  71</span>    <span class="k2">}</span>
<span class="number">  72</span>    <span class="k1">else</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="number">  73</span>    <span class="k2">{</span>
<span class="number">  74</span>      redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  75</span>      <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span><span class="k2">)</span>
<span class="number">  76</span>      <span class="k2">{</span>
<span class="number">  77</span>        whiteCar.speed <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">2</span><span class="k2">;</span>
<span class="number">  78</span>        MoveCarForward<span class="k2">(</span>whiteCar<span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span>      <span class="k2">}</span>
<span class="number">  80</span>      <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>DOWN<span class="k2">]</span><span class="k2">)</span>
<span class="number">  81</span>      <span class="k2">{</span>
<span class="number">  82</span>        whiteCar.reverseSpeed <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number">  83</span>        MoveCarBackward<span class="k2">(</span>whiteCar<span class="k2">)</span><span class="k2">;</span>
<span class="number">  84</span>      <span class="k2">}</span>
<span class="number">  85</span>      <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>LEFT<span class="k2">]</span><span class="k2">)</span>
<span class="number">  86</span>      <span class="k2">{</span>
<span class="number">  87</span>        whiteCar.angle <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">07</span><span class="k2">;</span>
<span class="number">  88</span>      <span class="k2">}</span>
<span class="number">  89</span>      <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>RIGHT<span class="k2">]</span><span class="k2">)</span>
<span class="number">  90</span>      <span class="k2">{</span>
<span class="number">  91</span>        whiteCar.angle <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">07</span><span class="k2">;</span>
<span class="number">  92</span>      <span class="k2">}</span>
<span class="number">  93</span>    <span class="k2">}</span>
<span class="number">  94</span>    <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number">  95</span>    <span class="k2">{</span>
<span class="number">  96</span>      <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number">  97</span>      <span class="k2">{</span>
<span class="number">  98</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number">  99</span>        done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 100</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 101</span>      <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 102</span>        keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 103</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 104</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 105</span>        keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 106</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 107</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 108</span>        keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 109</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 110</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 111</span>        keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 112</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 113</span>      <span class="k2">}</span>
<span class="number"> 114</span>    <span class="k2">}</span>
<span class="number"> 115</span>    <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span>
<span class="number"> 116</span>    <span class="k2">{</span>
<span class="number"> 117</span>      <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number"> 118</span>      <span class="k2">{</span>
<span class="number"> 119</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 120</span>        done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 121</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 122</span>      <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 123</span>        keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 124</span>        whiteCar.speed <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 125</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 126</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 127</span>        keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 128</span>        whiteCar.reverseSpeed <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 129</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 130</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 131</span>        keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 132</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 133</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 134</span>        keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 135</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 136</span>      <span class="k2">}</span>
<span class="number"> 137</span>    <span class="k2">}</span>
<span class="number"> 138</span>
<span class="number"> 139</span>    <span class="k1">if</span><span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 140</span>    <span class="k2">{</span>
<span class="number"> 141</span>      redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 142</span>      DrawCar<span class="k2">(</span>whiteCar<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span>    
<span class="number"> 144</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"> 145</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"> 146</span>    <span class="k2">}</span>
<span class="number"> 147</span>    <span class="k1">if</span> <span class="k2">(</span>whiteCar.speed <span class="k3">&gt;</span><span class="k3">=</span> whiteCar.maxForwardSpeed<span class="k2">)</span>
<span class="number"> 148</span>      whiteCar.speed <span class="k3">=</span> whiteCar.maxForwardSpeed<span class="k2">;</span>
<span class="number"> 149</span>    <span class="k1">if</span> <span class="k2">(</span>whiteCar.reverseSpeed <span class="k3">&lt;</span><span class="k3">=</span> whiteCar.maxReverseSpeed<span class="k2">)</span>
<span class="number"> 150</span>      whiteCar.reverseSpeed <span class="k3">=</span> whiteCar.maxReverseSpeed<span class="k2">;</span>
<span class="number"> 151</span>  <span class="k2">}</span>
<span class="number"> 152</span>
<span class="number"> 153</span>  <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 154</span>  <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 155</span>  <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>            
<span class="number"> 156</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>car<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 157</span>
<span class="number"> 158</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 159</span><span class="k2">}</span>
<span class="number"> 160</span>
<span class="number"> 161</span><span class="k1">void</span> InitCar<span class="k2">(</span>Car <span class="k3">&amp;</span>whiteCar, <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>car<span class="k2">)</span>
<span class="number"> 162</span><span class="k2">{</span>
<span class="number"> 163</span>  whiteCar.x <span class="k3">=</span> WIDTH <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span>
<span class="number"> 164</span>  whiteCar.y <span class="k3">=</span> HEIGHT<span class="k2">;</span>
<span class="number"> 165</span>  whiteCar.ID <span class="k3">=</span> PLAYER<span class="k2">;</span>
<span class="number"> 166</span>  whiteCar.angle <span class="k3">=</span> <span class="n">4</span>.<span class="n">713</span><span class="k2">;</span>
<span class="number"> 167</span>  whiteCar.speed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 168</span>  whiteCar.reverseSpeed <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 169</span>  whiteCar.maxForwardSpeed <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>
<span class="number"> 170</span>  whiteCar.maxReverseSpeed <span class="k3">=</span> <span class="k3">-</span><span class="n">5</span><span class="k2">;</span>
<span class="number"> 171</span>  whiteCar.image <span class="k3">=</span> car<span class="k2">;</span>
<span class="number"> 172</span><span class="k2">}</span>
<span class="number"> 173</span>
<span class="number"> 174</span><span class="k1">void</span> DrawCar<span class="k2">(</span>Car <span class="k3">&amp;</span>whiteCar<span class="k2">)</span>
<span class="number"> 175</span><span class="k2">{</span>
<span class="number"> 176</span>  <a href="http://www.allegro.cc/manual/al_draw_rotated_bitmap"><span class="a">al_draw_rotated_bitmap</span></a><span class="k2">(</span>whiteCar.image, <span class="n">75</span>, <span class="n">25</span>, whiteCar.x, whiteCar.y <span class="k3">-</span> <span class="n">100</span>, whiteCar.angle, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 177</span><span class="k2">}</span>
<span class="number"> 178</span><span class="k1">void</span> MoveCarForward<span class="k2">(</span>Car <span class="k3">&amp;</span>whiteCar<span class="k2">)</span>
<span class="number"> 179</span><span class="k2">{</span>
<span class="number"> 180</span>  whiteCar.x <span class="k3">=</span> whiteCar.x <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>whiteCar.angle<span class="k2">)</span> <span class="k3">*</span> whiteCar.speed<span class="k2">;</span>
<span class="number"> 181</span>  whiteCar.y <span class="k3">=</span> whiteCar.y <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>whiteCar.angle<span class="k2">)</span> <span class="k3">*</span> whiteCar.speed<span class="k2">;</span>
<span class="number"> 182</span><span class="k2">}</span>
<span class="number"> 183</span><span class="k1">void</span> MoveCarBackward<span class="k2">(</span>Car <span class="k3">&amp;</span>whiteCar<span class="k2">)</span>
<span class="number"> 184</span><span class="k2">{</span>
<span class="number"> 185</span>  whiteCar.x <span class="k3">=</span> whiteCar.x <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>whiteCar.angle<span class="k2">)</span> <span class="k3">*</span> whiteCar.reverseSpeed<span class="k2">;</span>
<span class="number"> 186</span>  whiteCar.y <span class="k3">=</span> whiteCar.y <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>whiteCar.angle<span class="k2">)</span> <span class="k3">*</span> whiteCar.reverseSpeed<span class="k2">;</span>
<span class="number"> 187</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Nortski)</author>
		<pubDate>Sun, 12 Apr 2015 23:34:46 +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/615282/1012123#target">Nortski</a> said:</div><div class="quote"><p>
In your explanation you have velocity as a single variable, or do you? <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div></div><p>
Velocity is a vector. A vector has a magnitude, and an angle. The magnitude determines how much is added each frame (of velocity, or position), and the angle determines what direction.</p><p>[edit]</p><p>You want the velocity, and acceleration updates to occur every logic event, typically after you&#39;ve processed input. So with no mass or anything like that, you get something like this:</p><div class="source-code snippet"><div class="inner"><pre> <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="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span><span class="k2">)</span> acceleration <span class="k3">+</span><span class="k3">=</span> .<span class="n">1</span><span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>DOWN<span class="k2">]</span><span class="k2">)</span> acceleration <span class="k3">-</span><span class="k3">=</span> .<span class="n">1</span><span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>LEFT<span class="k2">]</span><span class="k2">)</span> whiteCar.angle <span class="k3">+</span><span class="k3">=</span> .<span class="n">1</span><span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>RIGHT<span class="k2">]</span><span class="k2">)</span> whiteCar.angle <span class="k3">-</span><span class="k3">=</span> .<span class="n">1</span><span class="k2">;</span>

whiteCar.velocity <span class="k3">+</span><span class="k3">=</span> acceleration<span class="k2">;</span>
whiteCar.x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>whiteCar.angle<span class="k2">)</span><span class="k3">*</span>whiteCar.velocity<span class="k2">;</span>
whiteCar.y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>whiteCar.angle<span class="k2">)</span><span class="k3">*</span>whiteCar.velocity<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

You shouldn&#39;t need a backward and forward functions because negative velocity goes backwards!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Mon, 13 Apr 2015 01:08:01 +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/615282/1012120#target">Chris Katko</a> said:</div><div class="quote"><p>
So velocity is delta V / T. (Change in V per time)</p><p>And to use it in your game, you just do x += velocity every frame right?</p><p>Acceleration is just the change in velocity over a given time.</p><p>So acceleration is delta A / T. 
</p></div></div><p>
Don&#39;t have much to add to this thread, except that this is not accurate. Velocity is the change in position per unit of time, not dV/t, and acceleration is change in velocity per unit of time, not dA/t. I think you just misspoke.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 13 Apr 2015 01:13:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Whoops, I did write that reversed. Thanks for noticing it.</p><p>Velocity is velocity over delta-T, or V/dt. Delta means change. So the amount that time changes between two points. </p><p>For some reason, I can&#39;t edit that post anymore.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Mon, 13 Apr 2015 01:16:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah right OK, I was confusing myself (happens often). I thought my object.speed and your object.velocity were separate when in fact they both just mean &#39;length&#39; right?</p><p>I just changed mine to object.velocity.</p><p>OK that seems to work. Except, my maxVelocity no longer works since we added the ACCELERATION variable.</p><p>I had it set as:
</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">if</span> <span class="k2">(</span>object.velocity <span class="k3">&gt;</span><span class="k3">=</span> object.maxVelocity<span class="k2">)</span>
<span class="number"> 2</span>    object.velocity <span class="k3">=</span> object.maxVelocity<span class="k2">;</span>
</div></div><p>

I&#39;ve got rid of the BACKWARD function. I had it because I wanted to set a separate maxVelocity for reverse.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Nortski)</author>
		<pubDate>Mon, 13 Apr 2015 03:42:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Maximum velocity should still work fine, just make sure it&#39;s checked after the acceleration is applied:
</p><div class="source-code snippet"><div class="inner"><pre>velocity <span class="k3">+</span><span class="k3">=</span> acceleration<span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span>velocity <span class="k3">&gt;</span> max_velocity<span class="k2">)</span>velocity <span class="k3">=</span> max_velocity<span class="k2">;</span>
<span class="k1">if</span><span class="k2">(</span>velocity <span class="k3">&lt;</span> <span class="k3">-</span><span class="k2">(</span>max_reverse_velocity<span class="k2">)</span><span class="k2">)</span>velocity <span class="k3">=</span> <span class="k3">-</span>max_reverse_velocity<span class="k2">;</span>
</pre></div></div><p>

</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615282/1012132#target">Nortski</a> said:</div><div class="quote"><p>
Ah right OK, I was confusing myself (happens often). I thought my object.speed and your object.velocity were separate when in fact they both just mean &#39;length&#39; right?
</p></div></div><p>
Yes. They all mean the same thing in this context, but can occasionally mean other things in other contexts.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Mon, 13 Apr 2015 03:46:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OK things are looking much better now.</p><p>The car will switch direction, forward and backwards, much more realistically now as long as there is no interval between the UP and DOWN keys.</p><p>I still can&#39;t get it to slow down when a key is depressed, it&#39;s still stops dead.</p><p>I&#39;m trying to implement the rolling resistance method and have tried it in various positions in my game loop.</p><p>On a side note. I have an ALLEGRO_EVENT_TIMER in my game loop that executes 60 times a second. Does this execute independently from the main game loop?</p><p>It&#39;s easy to put these things into your code but unless you understand what&#39;s happening it just becomes data entry rather than learning.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Nortski)</author>
		<pubDate>Mon, 13 Apr 2015 21:55:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You need to apply drag by multiplying your velocity by a set factor. Use something close to 1.00 or so and only adjust the velocity by the drag when a timer is fired and after applying acceleration and not when decelerating (as that has its own coefficient). Also, acceleration is usually constant but you can increase it with time if a key is held down, like pushing harder on a gas or brake pedal.</p><p>Example :<br />If you update 60 times per second, then your drag factor will be applied exponentially, so you have to take care to calculate how much you will slow down in a second. Say you are using a drag factor of 0.99. (0.99)^60 is about 0.55. That means your car would lose 45% of its velocity every second. Anything less than .95 and you will probably stop almost immediately.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 14 Apr 2015 01:44:57 +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/615282/1012159#target">Nortski</a> said:</div><div class="quote"><p>I still can&#39;t get it to slow down when a key is depressed, it&#39;s still stops dead.</p></div></div><p>
This actually sounds like a logic error to me. Either you accidentally set &#39;speed&#39; instantly back to 0 somewhere, or you stopped applying the &#39;position += speed&#39; when nothing was pressed. From your description in your first post, it sounds as if you had a pretty good idea (speed increases linearly up to a maximum) all along.</p><p>By the way, if you want to base things on real physics: friction with a surface applies a linear deceleration (for example, speed -= 0.2 each frame; it&#39;s more complicated if you have your velocity defined in 2D), and air resistance applies an opposing force proportional to the <i>square</i> of the speed (i.e. speed -= someConstant * speed * speed every frame; again, more complicated in 2D). What Edgar suggested is however very useful if you don&#39;t care about realism and just want something that feels nice, and it&#39;s also very easy to generalise to 2D, unlike the other two schemes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bruce Perry)</author>
		<pubDate>Tue, 14 Apr 2015 02:37:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the info guys, very informative.</p><p>At first, I just wanted something that &#39;did the job&#39; but now that I&#39;ve started I want to delve deeper into the physics.</p><p>Unfortunately for me, maths has never been my strong point so I&#39;m battling to take this all in.</p><p>Bruce, you were right. I hadn&#39;t included the velocity heading in my IF KEY UP statement!</p><p>Now, my car will roll to a stop when moving in a forward direction, but stops dead in a reverse direction. It will be a logical error but I have tired eyes and cannot identify it.</p><p>My MoveCar() function is:
</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">void</span> MoveCar<span class="k2">(</span>Car <span class="k3">&amp;</span>object<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span> <span class="k3">|</span><span class="k3">|</span> keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span>
<span class="number">  4</span>  <span class="k2">{</span>
<span class="number">  5</span>    object.velocity <span class="k3">+</span><span class="k3">=</span> acceleration<span class="k2">;</span>
<span class="number">  6</span>    <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&gt;</span> object.maxVelocity<span class="k2">)</span>
<span class="number">  7</span>    <span class="k2">{</span>
<span class="number">  8</span>      object.velocity <span class="k3">=</span> object.maxVelocity<span class="k2">;</span>
<span class="number">  9</span>      acceleration <span class="k3">=</span> <span class="n">0</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>object.velocity <span class="k3">&lt;</span> <span class="k3">-</span><span class="k2">(</span>object.maxReverseVelocity<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 13</span>    <span class="k2">{</span>
<span class="number"> 14</span>      object.velocity <span class="k3">=</span> <span class="k3">-</span>object.maxReverseVelocity<span class="k2">;</span>
<span class="number"> 15</span>      acceleration <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 16</span>    <span class="k2">}</span>
<span class="number"> 17</span>    object.x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 18</span>    object.y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 19</span>  <span class="k2">}</span>
<span class="number"> 20</span>  
<span class="number"> 21</span>  <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
<span class="number"> 22</span>  <span class="k2">{</span>
<span class="number"> 23</span>    <span class="k2">{</span>
<span class="number"> 24</span>      object.x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 25</span>      object.y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 26</span>      object.velocity <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">2</span><span class="k2">;</span>
<span class="number"> 27</span>      <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 28</span>      <span class="k2">{</span>
<span class="number"> 29</span>        object.velocity <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 30</span>        acceleration <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 31</span>      <span class="k2">}</span>
<span class="number"> 32</span>    <span class="k2">}</span>
<span class="number"> 33</span>  <span class="k2">}</span>
<span class="number"> 34</span>  <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
<span class="number"> 35</span>  <span class="k2">{</span>
<span class="number"> 36</span>    <span class="k2">{</span>
<span class="number"> 37</span>      object.x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 38</span>      object.y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 39</span>      object.velocity <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">2</span><span class="k2">;</span>
<span class="number"> 40</span>      <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 41</span>      <span class="k2">{</span>
<span class="number"> 42</span>        object.velocity <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 43</span>        acceleration <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 44</span>      <span class="k2">}</span>
<span class="number"> 45</span>    <span class="k2">}</span>
<span class="number"> 46</span>  <span class="k2">}</span>
<span class="number"> 47</span><span class="k2">}</span>
</div></div><p>

Also, I would like to apply something a little more realistic than <span class="source-code">object.velocity <span class="k3">-</span><span class="k3">=</span><span class="n">0</span>.<span class="n">2</span></span> to roll my car to a stop. Rolling resistance or wind resistance? OR something else?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Nortski)</author>
		<pubDate>Tue, 14 Apr 2015 04:45:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Think about those &#39;if&#39; conditions. To get you on the right track, think about the four possibilities at any given time:</p><p>UP is held<br />DOWN is held<br />UP and DOWN are both held<br />Neither is held</p><p>You&#39;ll have to shuffle stuff around to fix it. You should also think about whether any of the lines you&#39;re repeating can be moved around so that you only have them once.</p><p>The problems/solutions we&#39;ve got here will appear in everything you write - it&#39;s worth spending time thinking through things like this so it gets easier next time <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>And actually, &quot;velocity -= 0.2&quot; is pretty much the exact correct operation for a car rolling to a stop. Wind resistance will only become significant at high speeds, and it&#39;s pretty subtle, but it&#39;s the equation I gave you above (but be careful because if the speed gets even higher, speed * speed can become too big and your step will take you to a very high speed in the opposite direction...) Generally it&#39;s not worth putting that kind of thing in, unless you find a gameplay reason for it. Definitely it&#39;s a lower priority than sorting out the logic. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bruce Perry)</author>
		<pubDate>Tue, 14 Apr 2015 05:56:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OK very close now!</p><p>The car rolls to a stop in both directions now, yey.</p><p>But there&#39;s a little flaw that&#39;s annoying me.</p><p>If I press a direction key, say UP, release before I reach maxSpeed and then quick press the opposite direction key, the car gains a sudden boost in acceleration in the original direction.</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">void</span> MoveCar<span class="k2">(</span>Car <span class="k3">&amp;</span>object<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
<span class="number">  4</span>  <span class="k2">{</span>
<span class="number">  5</span>    object.x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number">  6</span>    object.y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number">  7</span>    object.velocity <span class="k3">+</span><span class="k3">=</span> acceleration<span class="k2">;</span>
<span class="number">  8</span>    <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&gt;</span> object.maxVelocity<span class="k2">)</span>
<span class="number">  9</span>    <span class="k2">{</span>
<span class="number"> 10</span>      object.velocity <span class="k3">=</span> object.maxVelocity<span class="k2">;</span>
<span class="number"> 11</span>      acceleration <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 12</span>    <span class="k2">}</span>
<span class="number"> 13</span>  <span class="k2">}</span>
<span class="number"> 14</span>
<span class="number"> 15</span>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
<span class="number"> 16</span>  <span class="k2">{</span>
<span class="number"> 17</span>    object.x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 18</span>    object.y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 19</span>    object.velocity <span class="k3">+</span><span class="k3">=</span> acceleration<span class="k2">;</span>
<span class="number"> 20</span>    <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&lt;</span> <span class="k3">-</span><span class="k2">(</span>object.maxReverseVelocity<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 21</span>    <span class="k2">{</span>
<span class="number"> 22</span>      object.velocity <span class="k3">=</span> <span class="k3">-</span>object.maxReverseVelocity<span class="k2">;</span>
<span class="number"> 23</span>      acceleration <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 24</span>    <span class="k2">}</span>
<span class="number"> 25</span>  <span class="k2">}</span>
<span class="number"> 26</span>
<span class="number"> 27</span>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> object.velocity <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 28</span>  <span class="k2">{</span>
<span class="number"> 29</span>    object.x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 30</span>    object.y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 31</span>    object.velocity <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">2</span><span class="k2">;</span>
<span class="number"> 32</span>    <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 33</span>    <span class="k2">{</span>
<span class="number"> 34</span>      object.velocity <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 35</span>      acceleration <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 36</span>    <span class="k2">}</span>
<span class="number"> 37</span>  <span class="k2">}</span>
<span class="number"> 38</span>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> object.velocity <span class="k3">&amp;</span><span class="k3">&amp;</span> keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span>
<span class="number"> 39</span>  <span class="k2">{</span>
<span class="number"> 40</span>    object.x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 41</span>    object.y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 42</span>    object.velocity <span class="k3">+</span><span class="k3">=</span> acceleration<span class="k2">;</span>
<span class="number"> 43</span>    <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&gt;</span> object.maxVelocity<span class="k2">)</span>
<span class="number"> 44</span>    <span class="k2">{</span>
<span class="number"> 45</span>      object.velocity <span class="k3">=</span> object.maxVelocity<span class="k2">;</span>
<span class="number"> 46</span>      acceleration <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 47</span>    <span class="k2">}</span>
<span class="number"> 48</span>  
<span class="number"> 49</span>    <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&lt;</span> <span class="k3">-</span><span class="k2">(</span>object.maxReverseVelocity<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 50</span>    <span class="k2">{</span>
<span class="number"> 51</span>      object.velocity <span class="k3">=</span> <span class="k3">-</span>object.maxReverseVelocity<span class="k2">;</span>
<span class="number"> 52</span>      acceleration <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 53</span>    <span class="k2">}</span>
<span class="number"> 54</span>  <span class="k2">}</span>
<span class="number"> 55</span>  <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> object.velocity <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 56</span>  <span class="k2">{</span>
<span class="number"> 57</span>    object.x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 58</span>    object.y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 59</span>    object.velocity <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">2</span><span class="k2">;</span>
<span class="number"> 60</span>    <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 61</span>    <span class="k2">{</span>
<span class="number"> 62</span>      object.velocity <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 63</span>      acceleration <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 64</span>    <span class="k2">}</span>
<span class="number"> 65</span>  <span class="k2">}</span>
<span class="number"> 66</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Nortski)</author>
		<pubDate>Wed, 15 Apr 2015 05:45:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This code hurts my brain a little. There&#39;s lots of nested ifs/elseifs, and duplicate code. Whenever that happens, you need to take a step back and make sure you&#39;re not over-complicating things.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> MoveCar<span class="k2">(</span>Car <span class="k3">&amp;</span>object<span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">if</span> <span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>
  <span class="k2">{</span>
    object.x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
    object.y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
    object.velocity <span class="k3">+</span><span class="k3">=</span> acceleration<span class="k2">;</span>
    <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&gt;</span> object.maxVelocity<span class="k2">)</span>
    <span class="k2">{</span>
      object.velocity <span class="k3">=</span> object.maxVelocity<span class="k2">;</span>
      acceleration <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
    <span class="k2">}</span>
  <span class="k2">}</span>
<span class="c">//... etc</span>
</pre></div></div><p>

Why not do something more like this:
</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">void</span> MoveCar<span class="k2">(</span>Car <span class="k3">&amp;</span>object<span class="k2">)</span>
<span class="number">  2</span>    <span class="k2">{</span>
<span class="number">  3</span>    
<span class="number">  4</span>    <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span><span class="k2">)</span>
<span class="number">  5</span>        <span class="k2">{</span>
<span class="number">  6</span>        acceleration <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number">  7</span>        <span class="k1">if</span><span class="k2">(</span>acceleration <span class="k3">&gt;</span> max_acceleration<span class="k2">)</span>acceleration <span class="k3">=</span> max_acceleration<span class="k2">;</span>
<span class="number">  8</span>        <span class="k2">}</span>
<span class="number">  9</span>    <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>DOWN<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 10</span>        <span class="k2">{</span>
<span class="number"> 11</span>        acceleration <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span><span class="k2">;</span>
<span class="number"> 12</span>        <span class="k1">if</span><span class="k2">(</span>acceleration <span class="k3">&lt;</span> max_reverse_acceleration<span class="k2">)</span>acceleration <span class="k3">=</span> max_reverse_acceleration<span class="k2">;</span>
<span class="number"> 13</span>        <span class="k2">}</span>
<span class="number"> 14</span>    <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&gt;</span> object.maxVelocity<span class="k2">)</span>
<span class="number"> 15</span>        <span class="k2">{</span>
<span class="number"> 16</span>        object.velocity <span class="k3">=</span> object.maxVelocity<span class="k2">;</span>
<span class="number"> 17</span>        acceleration <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 18</span>        <span class="k2">}</span><span class="c">//likewise for reverse</span>
<span class="number"> 19</span>    object.velocity <span class="k3">+</span><span class="k3">=</span> acceleration<span class="k2">;</span> <span class="c">//ADD acceleration AFTER you check/set it, not before.</span>
<span class="number"> 20</span>
<span class="number"> 21</span><span class="c">//ADD velocity to position AFTER you've set velocity.</span>
<span class="number"> 22</span>    object.x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 23</span>    object.y <span class="k3">+</span><span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>object.angle<span class="k2">)</span> <span class="k3">*</span> object.velocity<span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>
<span class="number"> 26</span><span class="c">//rolling resistance</span>
<span class="number"> 27</span>    <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 28</span>        <span class="k2">{</span>
<span class="number"> 29</span>        object.velocity <span class="k3">-</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">2</span><span class="k2">;</span>
<span class="number"> 30</span>        <span class="k1">if</span><span class="k2">(</span>object.velocity <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>object.velocity <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <span class="c">//Make sure we don't go from +.1 to -.1!</span>
<span class="number"> 31</span>        <span class="c">//the car shouldn't be going backwards after it slows down.</span>
<span class="number"> 32</span>        <span class="k2">}</span>
<span class="number"> 33</span><span class="c">//likewise for moving reverse</span>
<span class="number"> 34</span><span class="k2">}</span>
</div></div><p>

Note how the velocity and acceleration code gets called EVERY FRAME regardless of whether or not you&#39;re pressing a key. Only use the code in the key if statements to change the acceleration/angle, not to do logic that needs to be done regardless of whether the key is down or not.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Wed, 15 Apr 2015 20:07:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sorry, I think I confused you <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> I wanted you to think about what your existing code would do in those four states, to help you see that your second &#39;if&#39; would always be entered if reached, and your third &#39;if&#39; would never even be reached. It wasn&#39;t my intention to get you to write separate &#39;if&#39; blocks for all those four states.</p><p>Chris has largely done the work for you, but you will have to read through it and add some missing blocks where commented. When I talked about lines you might be repeating unnecessarily, I meant the ones with sin and cos in them, which you can see Chris only has once.</p><p>Hope we&#39;ve helped <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bruce Perry)</author>
		<pubDate>Fri, 17 Apr 2015 03:47:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Both posts were a lot of help. I only have the cos and sin lines in once now. But, I now have ten IF statements! haha</p><p>Once my understanding of logic develops I&#39;m sure scenarios like this will be easily streamlined. As it is, the car now moves pretty much as I want it to, although there are still tweaks to be made.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Nortski)</author>
		<pubDate>Fri, 17 Apr 2015 04:11:13 +0000</pubDate>
	</item>
</rss>
