<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Any Direction in 2d??</title>
		<link>http://www.allegro.cc/forums/view/583636</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 10 May 2006 07:40:06 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So, I have no idea even how to go about this.. So sorry I don&#39;t really have any source to put, so this&#39;ll mainly be a logic or pseudo-code thread. I&#39;ve seen this done before, so i&#39;m not just insane, how would I go about making a 2d topdown game (not iso) that you can face and shoot in any direction? The most desirable would probably be, your character would always face your cursor(which would be a gun aim picture thingy reticule) and you could turn around like that, and left mouse click would shoot. W would be forward, S be back, a and d be strafe and you know. Just kinda throwing that out there to get the feels of the controls I guess. Anyway, back to the point. The only way i&#39;ve thought of for this would be manually handelling the shoot function for every single possible direction you could face.. but that&#39;s.. that just can&#39;t be the only way, heh.. Would it have to involve some 3d aspects? I don&#39;t understand how I could update a bullet and read it to see which direction to shoot in any way in 2d. Am I crazy and the games I saw that did this were not 2d but iso or something??</p><p>EDIT: <a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=390918">http://www.gamedev.net/community/forums/topic.asp?topic_id=390918</a> &lt;-- that game does it and it&#39;s 2d topdown, so I can&#39;t be insane. But I still don&#39;t know how to go about it <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /><br />I was kinda thinking about it, and i&#39;d need to maybe somehow assign a &quot;front&quot; to the picture, and then some kind of function where the &quot;front&quot; always points towards the cursor. Any help or advice would be appreciated
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dylan sack)</author>
		<pubDate>Sun, 07 May 2006 10:19:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If I understand correctly, you need something like this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> CEnemy::Move<span class="k2">(</span><span class="k1">float</span> nX, <span class="k1">float</span> nY<span class="k2">)</span>
<span class="k2">{</span>
    <span class="k1">float</span> Angle <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_50.html" target="_blank">atan2</a><span class="k2">(</span>nY-Y, nX-X<span class="k2">)</span><span class="k3">*</span><span class="n">180</span>.<span class="n">0f</span><span class="k3">/</span>M_PI<span class="k2">;</span>
    
    X <span class="k3">+</span><span class="k3">=</span> cosf<span class="k2">(</span>Angle<span class="k3">*</span>M_PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0f</span><span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span>
    Y <span class="k3">+</span><span class="k3">=</span> sinf<span class="k2">(</span>Angle<span class="k3">*</span>M_PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0f</span><span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
What it does is make the CEnemy object move towards the (nX; nY) coordinates.</p><p>And in the bullet object you just do something like:
</p><div class="source-code snippet"><div class="inner"><pre>CBullet::CBullet<span class="k2">(</span><span class="k1">float</span> nAngle<span class="k2">)</span>
<span class="k2">{</span>
    Angle <span class="k3">=</span> nAngle<span class="k2">;</span>
    <span class="c">//other stuff here</span>
<span class="k2">}</span>
<span class="k1">void</span> CBullet::Move<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
    X <span class="k3">+</span><span class="k3">=</span> cosf<span class="k2">(</span>Angle<span class="k3">*</span>M_PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0f</span><span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span>
    Y <span class="k3">+</span><span class="k3">=</span> sinf<span class="k2">(</span>Angle<span class="k3">*</span>M_PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0f</span><span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
That should work fine.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CursedTyrant)</author>
		<pubDate>Sun, 07 May 2006 12:07:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>yes, what Mr. Tyrnat said.  It all basically comes down to angles, sin, and cosine. I recommend this tutorial to help clear things up:<br /><a href="http://pixwiki.bafsoft.com/mags/5/articles/circle/sincos.htm">http://pixwiki.bafsoft.com/mags/5/articles/circle/sincos.htm</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Sun, 07 May 2006 14:13:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Or you could do it slightly less confusing (and faster) by storing the angle as radians instead...</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> CEnemy::Move<span class="k2">(</span><span class="k1">float</span> nX, <span class="k1">float</span> nY<span class="k2">)</span>
<span class="k2">{</span>
    <span class="k1">float</span> Angle <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_50.html" target="_blank">atan2</a><span class="k2">(</span>nY-Y, nX-X<span class="k2">)</span><span class="k2">;</span>
    
    X <span class="k3">+</span><span class="k3">=</span> cosf<span class="k2">(</span>Angle<span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span>
    Y <span class="k3">+</span><span class="k3">=</span> sinf<span class="k2">(</span>Angle<span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

you could also use pure vector maths for this problem;
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> CEnemy::Move<span class="k2">(</span><span class="k1">float</span> nX, <span class="k1">float</span> nY<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>    <span class="k1">float</span> tx,ty,length<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><span class="c">//This gets a vector pointing at the nx,ny</span></td></tr><tr><td class="number">6</td><td>    tx <span class="k3">=</span> x-nx<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    ty <span class="k3">=</span> y-ny<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td><span class="c">//Gets the length of the vector through pyth's</span></td></tr><tr><td class="number">10</td><td>    length <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span>tx<span class="k3">*</span>tx<span class="k3">+</span>ty<span class="k3">*</span>ty<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><span class="c">//Normalizes the vector, making it's total length 1. You should also make sure length isnt 0</span></td></tr><tr><td class="number">13</td><td>    tx <span class="k3">=</span> tx<span class="k3">/</span>length<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>    ty <span class="k3">=</span> ty<span class="k3">/</span>length<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td><span class="c">//Update the position</span></td></tr><tr><td class="number">17</td><td>    X <span class="k3">+</span><span class="k3">=</span> tx<span class="k3">*</span>Speed<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>    Y <span class="k3">+</span><span class="k3">=</span> ty<span class="k3">*</span>Speed<span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
Untested, but that ought to work too.</p><p>Not sure which one would be faster, but both has some merits.</p><p>And as for the bullet, once again, store the angle in the native form:
</p><div class="source-code snippet"><div class="inner"><pre>CBullet::CBullet<span class="k2">(</span><span class="k1">float</span> nAngle<span class="k2">)</span>
<span class="k2">{</span>
    Angle <span class="k3">=</span> nAngle<span class="k3">*</span>M_PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0f</span><span class="k2">;</span>
    <span class="c">//other stuff here</span>
<span class="k2">}</span>
<span class="k1">void</span> CBullet::Move<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
    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>Angle<span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span>
    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>Angle<span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Or use vectors
</p><div class="source-code snippet"><div class="inner"><pre>CBullet::CBullet<span class="k2">(</span><span class="k1">float</span> nAngle<span class="k2">)</span>
<span class="k2">{</span>
    tx <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>nAngle<span class="k2">)</span><span class="k2">;</span>
    ty <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>nAngle<span class="k2">)</span><span class="k2">;</span>
    <span class="c">//other stuff here</span>
<span class="k2">}</span>
<span class="k1">void</span> CBullet::Move<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
    X <span class="k3">+</span><span class="k3">=</span> tX<span class="k3">*</span>Speed<span class="k2">;</span>
    Y <span class="k3">+</span><span class="k3">=</span> tY<span class="k3">*</span>Speed<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
In this case vectors would be faster and simpler (heck, you can even store speed right in the tx/ty pair by multiplying them with it in the start).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jonatan Hedborg)</author>
		<pubDate>Sun, 07 May 2006 15:18:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Wow, three answers, talk about service ^_^ Thanks for the help guys i&#39;m going to go try to work that into my game right now.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dylan sack)</author>
		<pubDate>Sun, 07 May 2006 20:54:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There are only a few basic facts when talking about 2D coordinates and directions. The rest derives from the basics. In Allegro graphics you have one coordinate growing from left to right, usually called x, and another growing from top to down, usually called y. The rest, especially the direction stuff, is up to you, as I see it. You can use radians or Allegro angle units for the direction. You can decide that zero be to the right, to the left, up or down. And you can choose that growing direction is like rotating clockwise, or counter clockwise. I guess there&#39;s a standard used in games, but I&#39;ve never bothered to figure out that. I might use the stuff differently in different games, because I&#39;m a lousy coder what comes to reusing stuff. Whatever you choose, it affects the trigonometric formulae, which should be clear for you.</p><p>Jonathan&#39;s code said:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> CBullet::Move<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
    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>Angle<span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span>
    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>Angle<span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

It works, but it computes the cos(Angle)*Speed each time the bullet moves. It should compute it only when either Angle or Speed is altered.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Johan Halmén)</author>
		<pubDate>Sun, 07 May 2006 21:22:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok tried a few of the methods out, and i&#39;m having weird errors about converting to fixed or whatever. Can anyone explain this? 
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">class</span> Player</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>public:</td></tr><tr><td class="number">4</td><td>     <span class="k1">int</span> x, y<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>     <span class="k1">int</span> p_facing<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>     <span class="k1">int</span> p_hp<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>     <span class="k1">void</span> move<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td><span class="k2">}</span><span class="k2">;</span>     </td></tr><tr><td class="number">9</td><td>Player player<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><span class="k1">void</span> move<span class="k2">(</span><span class="k1">float</span> nX, <span class="k1">float</span> nY<span class="k2">)</span> </td></tr><tr><td class="number">13</td><td><span class="k2">{</span></td></tr><tr><td class="number">14</td><td>    <span class="k1">int</span> Speed<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    <span class="k1">float</span> Angle <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_50.html" target="_blank">atan2</a><span class="k2">(</span>nY-player.y, nX-player.x<span class="k2">)</span><span class="k2">;</span> <span class="c">// conversion from `float' to non-scalar type `fix'  requested </span></td></tr><tr><td class="number">16</td><td>    </td></tr><tr><td class="number">17</td><td>    player.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>Angle<span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span><span class="c">//conversion from `float' to non-scalar type `fix'  requested </span></td></tr><tr><td class="number">18</td><td>    player.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>Angle<span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span><span class="c">//conversion from `float' to non-scalar type `fix'  requested </span></td></tr><tr><td class="number">19</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
I&#39;m pretty new to using any kind of maths in games and just coding games in general.. (i&#39;m only a freshman in algebra 2 &gt;.&lt;) So if I did something realllly dumb try to forgive me <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dylan sack)</author>
		<pubDate>Sun, 07 May 2006 21:35:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Include cmath in your source-file:
</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#include &lt;cmath&gt;</span>
</pre></div></div><p>

I hope that helps...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (imaxcs)</author>
		<pubDate>Sun, 07 May 2006 21:45:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>BTW, If you&#39;re using floats use cosf and sinf. Like this:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">float</span> Angle <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_50.html" target="_blank">atan2</a><span class="k2">(</span>nY-player.y, nX-player.x<span class="k2">)</span><span class="k2">;</span>

player.x <span class="k3">+</span><span class="k3">=</span> cosf<span class="k2">(</span>Angle<span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span>
player.y <span class="k3">+</span><span class="k3">=</span> sinf<span class="k2">(</span>Angle<span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span>
</pre></div></div><p>
You could also use atan2f if you really want to.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CursedTyrant)</author>
		<pubDate>Sun, 07 May 2006 21:53:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">dylan said:</div><div class="quote"><p>
So if I did something realllly dumb try to forgive me
</p></div></div><p>
We forgive you, but I don&#39;t see the point in it <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Johan Halmén)</author>
		<pubDate>Sun, 07 May 2006 23:28:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok so all these variables are kinda confusing me, what exactly needs to be added to if  say I wanted to make a keypress have you rotate to the right? I experimented around with adding values to some of the variables and nothing happened, given I never really took the time to fully understand the code you guys gave me, i&#39;m just kinda using it <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> But I donno, I think i&#39;m just generally confused about it still.
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">class</span> Player</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>public:</td></tr><tr><td class="number">4</td><td>     <span class="k1">int</span> x, y<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>     <span class="k1">int</span> p_facing<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>     <span class="k1">int</span> p_hp<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>     <span class="k1">void</span> move<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td><span class="k2">}</span><span class="k2">;</span>     </td></tr><tr><td class="number">9</td><td>Player player<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><span class="k1">void</span> move<span class="k2">(</span><span class="k1">float</span> nX, <span class="k1">float</span> nY<span class="k2">)</span> </td></tr><tr><td class="number">13</td><td><span class="k2">{</span></td></tr><tr><td class="number">14</td><td>    <span class="k1">float</span> X,Y<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    <span class="k1">float</span> Speed<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>    <span class="k1">float</span> Angle <span class="k3">=</span> atan2f<span class="k2">(</span>nY-player.y, nX-player.x<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    </td></tr><tr><td class="number">18</td><td>    X <span class="k3">+</span><span class="k3">=</span> cosf<span class="k2">(</span>Angle<span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    Y <span class="k3">+</span><span class="k3">=</span> sinf<span class="k2">(</span>Angle<span class="k2">)</span><span class="k3">*</span>Speed<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td>    </td></tr><tr><td class="number">22</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dylan sack)</author>
		<pubDate>Mon, 08 May 2006 07:50:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There&#39;s no use in trying to get our examples work if you don&#39;t understand them. If it is that hard, you simply have to step back some steps and do something simpler. And try to understand <i>every</i> step. </p><p>I could point out that your class has members x and y but the member function move()declares the variables X and Y, which you use in the moving. Well, it doesn&#39;t work. And if you don&#39;t get it, don&#39;t waste time in trying to get it work. Spend that valuable time instead in studying more basic things.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Johan Halmén)</author>
		<pubDate>Mon, 08 May 2006 11:26:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
And if you don&#39;t get it, don&#39;t waste time in trying to get it work. Spend that valuable time instead in studying more basic things.
</p></div></div><p>
Johan speaks the truth.  But I believe that you can figure this part out.  Let me try and help.</p><p>If you change your player class to contain these variables it should make things much more clear:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">class</span> player_class</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>public:</td></tr><tr><td class="number">4</td><td>    <span class="k1">float</span> x<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">float</span> y<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    <span class="k1">float</span> angle<span class="k2">;</span>  <span class="c">// the player's angle, or heading</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">float</span> speed<span class="k2">;</span>  <span class="c">// the player's current speed</span></td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>    <span class="k1">float</span> turn_speed<span class="k2">;</span>  <span class="c">// a constant</span></td></tr><tr><td class="number">10</td><td>    <span class="k1">float</span> walk_speed<span class="k2">;</span>  <span class="c">// a constant</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>    player_class<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">13</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">14</td><td>       x <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>       y <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>       angle <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>       speed <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>       turn_speed <span class="k3">=</span> <span class="n">0</span>.<span class="n">001f</span><span class="k2">;</span>  <span class="c">// don't know about this, you might want to try a larger or smaller number      </span></td></tr><tr><td class="number">20</td><td>       walk_speed <span class="k3">=</span> <span class="n">5</span>.<span class="n">0f</span><span class="k2">;</span>   <span class="c">// expirement with this one too</span></td></tr><tr><td class="number">21</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>    <span class="k1">void</span> turn_right<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> angle <span class="k3">+</span><span class="k3">=</span> turn_speed<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">24</td><td>    <span class="k1">void</span> turn_left<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> angle <span class="k3">-</span><span class="k3">=</span> turn_speed<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">25</td><td>    <span class="k1">void</span> walk<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> speed <span class="k3">=</span> walk_speed<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">26</td><td>    <span class="k1">void</span> stop_walking<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> speed <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td>    <span class="k1">void</span> update<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">29</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">30</td><td>        x <span class="k3">+</span><span class="k3">=</span> cosf<span class="k2">(</span>angle<span class="k2">)</span> <span class="k3">*</span> speed<span class="k2">;</span></td></tr><tr><td class="number">31</td><td>        y <span class="k3">+</span><span class="k3">=</span> sinf<span class="k2">(</span>angle<span class="k2">)</span> <span class="k3">*</span> speed<span class="k2">;</span></td></tr><tr><td class="number">32</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">33</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>&#160;</td></tr><tr><td class="number">35</td><td>player_class player<span class="k2">;</span></td></tr></tbody></table></div></div><p>
so in your logic loop do something like
</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" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span> player.turn_right<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span><span class="k2">)</span> player.turn_left<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span> player.walk<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span> player.stop_walking<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

player.update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Mon, 08 May 2006 12:21:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the help, and I know I should go back and really figure it out and understand, which i&#39;m about to do. I was just really excited and kinda rushed because I wanted to see some real progress in my game. Feels like i&#39;m getting somewhere (even though I got a lot of help on this part of it <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> ) The thing is, if I declare x and y as floats, then my compiler says when I try to draw the sprite, you can&#39;t draw the sprite at a float location. So maybe I could do another x and y that are ints and make them equal to the float x and y&#39;s and draw them there? Thanks for all the help btw guys.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dylan sack)</author>
		<pubDate>Tue, 09 May 2006 06:30:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">float</span> f<span class="k2">;</span>
<span class="k1">int</span> i <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>f<span class="k2">;</span>
</pre></div></div><p>
you have to &#39;cast the float as an int&#39;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 09 May 2006 06:41:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for all the help, it works perfectly. I&#39;m pretty sure I can figure out rotating the sprite as it turns by myself. It works perfectly besides that. I&#39;m going to sit out a while and just read the code over and over untill I viualize how it perfectly works in my head.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dylan sack)</author>
		<pubDate>Tue, 09 May 2006 07:28:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>haha, ah yes.  I know the feeling.  It&#39;s like taking a dump after being constipated for a long time. &quot;I just want to take a break for a while&quot; <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 09 May 2006 07:47:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yea, but then you get constipated again <b>coughrotatespriteisdumbcough</b> and you must learn from your past and get through it on your own :O
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dylan sack)</author>
		<pubDate>Tue, 09 May 2006 07:56:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>otatespriteisdumb?... Oates&#39; Sprite is Dumb!?  <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /> <img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" /><img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" /> YOU DON&#39;T LIKE MY AVATAR!!!?!? <img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" /><img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" /><img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" /></p><p>...</p><p><img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" /></p><p>just kidding.<br /><img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 09 May 2006 09:40:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hey I have one last question <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />, how come this rotate sprite thingy isn&#39;t working. It compiles perfectly, and I have no idea why it&#39;s not rotating with the turning function. By all means it should, I know the problem isn&#39;t it getting drawn cause I tried it with the x and y a little offset and it showed up, it just doesn&#39;t rotate... 
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">class</span> player_class</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>public:</td></tr><tr><td class="number">4</td><td>     <span class="k1">float</span> x, y<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>     <span class="k1">float</span> speed<span class="k2">;</span> <span class="c">// players current speed</span></td></tr><tr><td class="number">6</td><td>     <span class="k1">float</span> angle<span class="k2">;</span> <span class="c">// players angle or direction facing</span></td></tr><tr><td class="number">7</td><td>     </td></tr><tr><td class="number">8</td><td>     <span class="k1">float</span> turn_speed<span class="k2">;</span> <span class="c">// a constant</span></td></tr><tr><td class="number">9</td><td>     <span class="k1">float</span> walk_speed<span class="k2">;</span> <span class="c">// a constant</span></td></tr><tr><td class="number">10</td><td>     <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>robot<span class="k2">;</span>     </td></tr><tr><td class="number">11</td><td>     <span class="k1">bool</span> boost<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  </td></tr><tr><td class="number">13</td><td>   player_class<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">14</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">15</td><td>       x <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>       y <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>       angle <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>       speed <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>       </td></tr><tr><td class="number">20</td><td>       turn_speed <span class="k3">=</span> .<span class="n">07f</span><span class="k2">;</span>  </td></tr><tr><td class="number">21</td><td>       walk_speed <span class="k3">=</span> <span class="n">1</span>.<span class="n">0f</span><span class="k2">;</span>   </td></tr><tr><td class="number">22</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">23</td><td>&#160;</td></tr><tr><td class="number">24</td><td><span class="k1">void</span> turn_right<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> angle <span class="k3">+</span><span class="k3">=</span> turn_speed<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">25</td><td><span class="k1">void</span> turn_left<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> angle <span class="k3">-</span><span class="k3">=</span> turn_speed<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">26</td><td><span class="k1">void</span> walk<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> speed <span class="k3">=</span> walk_speed<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">27</td><td><span class="k1">void</span> stop_walking<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> speed <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td><span class="k1">void</span> update<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">30</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">31</td><td>        x <span class="k3">+</span><span class="k3">=</span> cosf<span class="k2">(</span>angle<span class="k2">)</span> <span class="k3">*</span> speed<span class="k2">;</span></td></tr><tr><td class="number">32</td><td>        y <span class="k3">+</span><span class="k3">=</span> sinf<span class="k2">(</span>angle<span class="k2">)</span> <span class="k3">*</span> speed<span class="k2">;</span></td></tr><tr><td class="number">33</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">34</td><td>    </td></tr><tr><td class="number">35</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>player_class player<span class="k2">;</span></td></tr><tr><td class="number">37</td><td><span class="c">//rotate stuff</span></td></tr><tr><td class="number">38</td><td><span class="k1">void</span> rotate<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">39</td><td>    <span class="k1">int</span> x <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>player.x<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>    <span class="k1">int</span> y <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>player.y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k2">(</span>player.angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td><span class="k2">}</span></td></tr><tr><td class="number">43</td><td>     </td></tr><tr><td class="number">44</td><td>&#160;</td></tr><tr><td class="number">45</td><td><span class="k1">void</span> logic<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">46</td><td>     <span class="c">//more rotate stuff</span></td></tr><tr><td class="number">47</td><td>    </td></tr><tr><td class="number">48</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_D<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>player.turn_right<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> rotate<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">49</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_A<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>player.turn_left<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> rotate<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">50</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_W<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>player.walk<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">51</td><td>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_W<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>player.stop_walking<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">52</td><td>    </td></tr><tr><td class="number">53</td><td>    player.update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>    </td></tr><tr><td class="number">55</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_SPACE<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>player.boost <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">56</td><td>    <span class="k1">if</span><span class="k2">(</span>player.boost <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span> <span class="k2">{</span>player.walk_speed <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">57</td><td>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_SPACE<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>player.boost <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">58</td><td>    <span class="k1">if</span><span class="k2">(</span>player.boost <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span> <span class="k2">{</span>player.walk_speed <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">59</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
I have no idea why coding/life hates me..
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dylan sack)</author>
		<pubDate>Tue, 09 May 2006 09:43:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>what does your rotate sprite function look like?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Tue, 09 May 2006 09:46:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Your code said:
</p><div class="source-code snippet"><div class="inner"><pre><span class="c">//rotate stuff</span>
<span class="n">1</span><span class="k2">:</span> <span class="k1">void</span> rotate<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="n">2</span><span class="k2">:</span>     <span class="k1">int</span> x <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>player.x<span class="k2">)</span><span class="k2">;</span>
<span class="n">3</span><span class="k2">:</span>     <span class="k1">int</span> y <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>player.y<span class="k2">)</span><span class="k2">;</span>
<span class="n">4</span><span class="k2">:</span>     <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k2">(</span>player.angle<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
This function seems to be just a separate function, not a member of the class, right? In this function you declare the variables x, y and angle. These variables live only inside the function. In line 2, x is declared and gets its value from player.x, which implies that player is a global object. player.x itself is not changed, not truncated or rounded or anything. After line 4 all three variables, x, y, and angle come to a peaceful death and won&#39;t affect anything else in your program.</p><p>In my former post I tried to point out a very similar thing. It looks like you&#39;re not clear on how functions work and where local variables and global variables live (the scope of the variables).</p><p>What comes to casting, I have a bad habbit of not casting floats to ints before drawing. I get lots of compiler warnings, but they are only warnings. The program still works.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Johan Halmén)</author>
		<pubDate>Tue, 09 May 2006 11:45:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Always treat warnings as errors. Best case, they are a sign that you are debugging (and have commented out some code). Worst case, they are causes for real errors or bugs. Semi-bad case, they show bad style.<br />That said, a plain cast, IIRC, just cuts off the fractional part of the float. This is not a problem in this case, but when it comes to tile-based collision detection, for example, it can produce nasty bugs. Both -0.8f and 0.8f evalutate to 0. I prefer throwing in an extra floor():
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">float</span> f <span class="k3">=</span> some_number_you_choose<span class="k2">;</span>
<span class="k1">int</span> i <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_330.html" target="_blank">floor</a><span class="k2">(</span>f<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

@dylan: You need to understand the concept of &#39;scope&#39;. The scope of a variable is the part of the code during which it is valid. There are, basically, 4 kinds of variables in C++:<br />- Global variables. These are declared outside of all {} braces, that is, outside of all functions, classes, structs, etc. They are valid everywhere in the program. You can mark them as &quot;static&quot;, making them available in the current .cpp only.<br />- Local variables. Declared inside a block of {} braces, typically a function body, but occasionally, a loop body. Loop variables declared on-the-fly, e.g. in a for() loop, are also valid inside the loop only. On some rare occasions, a {} pair is inserted into a block of code for the sole purpose of creating a scope for a few variables. Usually though, such practise is a sign of bad style, and a dedicated function would be more appropriate.<br />- Member variables. Variables declared inside a class or struct. Each instance of the class will produce its own instance of the variable, and by default, the variable will only be valid in member functions of the class. Public member variables can be accessed through the . operator (e.g. foo.bar) and the shortcut -&gt; operator (e.g. foo-&gt;bar which is equivalent to (*foo).bar).<br />- Function parameters. A named function parameter works like a variable and is valid for the entire function body.</p><p>Any two variables may have the same name, provided their scopes don&#39;t overlap. It is even possible to have variables with identical names whose scopes overlap (but are not identical), but this causes a whole bunch of problems and is generally strongly advised against.</p><p>Example:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">int</span> i_am_global<span class="k2">;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">void</span> some_function<span class="k2">(</span><span class="k1">int</span> param1<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">4</td><td>  <span class="k1">int</span> a<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>  </td></tr><tr><td class="number">6</td><td>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> <span class="n">10</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">8</td><td>      a <span class="k3">+</span><span class="k3">=</span> param1<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  <span class="k2">}</span> <span class="c">// scope of int i ends here.</span></td></tr><tr><td class="number">10</td><td>  i_am_global <span class="k3">=</span> do_something_with<span class="k2">(</span>a<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td><span class="k2">}</span> <span class="c">// scope of int a and int param1 ends here.</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td><span class="k1">void</span> some_other_func<span class="k2">(</span><span class="k1">int</span> param1<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">14</td><td>  <span class="c">/* note that param1 in this function and param1 in some_function() are completely</span></td></tr><tr><td class="number">15</td><td><span class="c">     unrelated. */</span></td></tr><tr><td class="number">16</td><td>  i_am_global <span class="k3">=</span> do_something_with<span class="k2">(</span>param1<span class="k2">)</span><span class="k2">;</span> </td></tr><tr><td class="number">17</td><td>  <span class="c">// ...i_am_global, however, refers to the same variable throughout the entire program.</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span> <span class="c">// scope of param1 ends here</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Tue, 09 May 2006 14:00:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok considered what you guys said a bit, and have revised my code.. now it er.. doesn&#39;t work still, but i&#39;m pretty sure I stay inside my scopes hah. Anyway, i&#39;m going to post my code again, how about this time you could all just like.. hint towards what i&#39;m supposed to do so I can figure out something on my own for once heh. Anyway, at least i&#39;ve learned a lot from this about coding in general, right?
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">int</span> boostenergy <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td><span class="k1">class</span> player_class</td></tr><tr><td class="number">4</td><td><span class="k2">{</span></td></tr><tr><td class="number">5</td><td>public:</td></tr><tr><td class="number">6</td><td>     <span class="k1">float</span> x, y<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>     <span class="k1">float</span> speed<span class="k2">;</span> <span class="c">// players current speed</span></td></tr><tr><td class="number">8</td><td>     <span class="k1">float</span> angle<span class="k2">;</span> <span class="c">// players angle or direction facing</span></td></tr><tr><td class="number">9</td><td>     </td></tr><tr><td class="number">10</td><td>     <span class="k1">float</span> turn_speed<span class="k2">;</span> <span class="c">// a constant</span></td></tr><tr><td class="number">11</td><td>     <span class="k1">float</span> walk_speed<span class="k2">;</span> <span class="c">// a constant</span></td></tr><tr><td class="number">12</td><td>     <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>robot<span class="k2">;</span>     </td></tr><tr><td class="number">13</td><td>     <span class="k1">bool</span> boost<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>  </td></tr><tr><td class="number">15</td><td>   player_class<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">16</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">17</td><td>       x <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>       y <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>       angle <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>       speed <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>       </td></tr><tr><td class="number">22</td><td>       turn_speed <span class="k3">=</span> .<span class="n">06f</span><span class="k2">;</span>  </td></tr><tr><td class="number">23</td><td>       walk_speed <span class="k3">=</span> <span class="n">1</span>.<span class="n">0f</span><span class="k2">;</span>   </td></tr><tr><td class="number">24</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td><span class="k1">void</span> turn_right<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> angle <span class="k3">+</span><span class="k3">=</span> turn_speed<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">27</td><td><span class="k1">void</span> turn_left<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> angle <span class="k3">-</span><span class="k3">=</span> turn_speed<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">28</td><td><span class="k1">void</span> walk<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> speed <span class="k3">=</span> walk_speed<span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">29</td><td><span class="k1">void</span> stop_walking<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> speed <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">30</td><td>    <span class="c">//ROTATE junk.</span></td></tr><tr><td class="number">31</td><td><span class="k1">void</span> rotate_right<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">32</td><td>    <span class="k1">int</span> x <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>x<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>    <span class="k1">int</span> y <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>    <span class="k1">int</span> turn_speed <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>turn_speed<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>    angle <span class="k3">+</span><span class="k3">=</span> turn_speed<span class="k2">;</span></td></tr><tr><td class="number">37</td><td>    <a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>buffer, robot, y, x, angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td><span class="k2">}</span></td></tr><tr><td class="number">39</td><td><span class="k1">void</span> rotate_left<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">40</td><td>    <span class="k1">int</span> x <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>x<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    <span class="k1">int</span> y <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>    <span class="k1">int</span> turn_speed <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>turn_speed<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>    angle <span class="k3">-</span><span class="k3">=</span> turn_speed<span class="k2">;</span></td></tr><tr><td class="number">45</td><td>    <a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>buffer, robot, x, y, angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td><span class="k2">}</span></td></tr><tr><td class="number">47</td><td>&#160;</td></tr><tr><td class="number">48</td><td><span class="k1">void</span> update<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">49</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">50</td><td>        x <span class="k3">+</span><span class="k3">=</span> cosf<span class="k2">(</span>angle<span class="k2">)</span> <span class="k3">*</span> speed<span class="k2">;</span></td></tr><tr><td class="number">51</td><td>        y <span class="k3">+</span><span class="k3">=</span> sinf<span class="k2">(</span>angle<span class="k2">)</span> <span class="k3">*</span> speed<span class="k2">;</span></td></tr><tr><td class="number">52</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">53</td><td>    </td></tr><tr><td class="number">54</td><td><span class="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td>player_class player<span class="k2">;</span></td></tr><tr><td class="number">56</td><td>&#160;</td></tr><tr><td class="number">57</td><td>     </td></tr><tr><td class="number">58</td><td>&#160;</td></tr><tr><td class="number">59</td><td><span class="k1">void</span> logic<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">60</td><td>    <span class="c">//rotate logic</span></td></tr><tr><td class="number">61</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_D<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>player.turn_right<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> player.rotate_right<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">62</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_A<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>player.turn_left<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> player.rotate_left<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">63</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_W<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>player.walk<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">64</td><td>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_W<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>player.stop_walking<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">65</td><td>    </td></tr><tr><td class="number">66</td><td>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_SPACE<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>player.boost <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">67</td><td>    <span class="k1">if</span><span class="k2">(</span>player.boost <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> boostenergy <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>player.walk_speed <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span> boostenergy <span class="k3">-</span><span class="k3">=</span><span class="n">1</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">68</td><td>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_SPACE<span class="k2">]</span> <span class="k3">|</span><span class="k3">|</span> boostenergy <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>player.boost <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">69</td><td>    <span class="k1">if</span><span class="k2">(</span>player.boost <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span> <span class="k2">{</span>player.walk_speed <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> boostenergy<span class="k3">+</span><span class="k3">=</span><span class="n">1</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">70</td><td>    </td></tr><tr><td class="number">71</td><td>    player.update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">72</td><td><span class="k2">}</span></td></tr><tr><td class="number">73</td><td>&#160;</td></tr><tr><td class="number">74</td><td>&#160;</td></tr><tr><td class="number">75</td><td><span class="k1">void</span> draw<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">76</td><td>     <span class="k1">int</span> x <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>player.x<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">77</td><td>     <span class="k1">int</span> y <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>player.y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">78</td><td>     <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">79</td><td>     <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, buffer, <span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">80</td><td>     <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>buffer, bg, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">81</td><td>     <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>buffer, player.robot, x, y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">82</td><td>     <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">83</td><td><span class="k2">}</span></td></tr><tr><td class="number">84</td><td><span class="c">//in main loop</span></td></tr><tr><td class="number">85</td><td>    <a href="http://www.allegro.cc/manual/clear_keybuf" target="_blank"><span class="a">clear_keybuf</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">86</td><td>    draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">87</td><td>    logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">88</td><td>    player.update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dylan sack)</author>
		<pubDate>Wed, 10 May 2006 07:19:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
doesn&#39;t work still
</p></div></div><p>
What &quot;doesn&#39;t work still&quot;?  The rotation?  What is it doing?  </p><p>Anyways, where did you learn to do classes?  I&#39;m not implying anything, other than I get the feeling you don&#39;t completely understand them.</p><p>BTW, weren&#39;t you working on a side-scoller?  How did that turn out?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Onewing)</author>
		<pubDate>Wed, 10 May 2006 07:40:06 +0000</pubDate>
	</item>
</rss>
