<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Rotate a bitmap</title>
		<link>http://www.allegro.cc/forums/view/323382</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 04 Jan 2004 02:55:16 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>How to rotate a bitmap?<br />I just started with allegro and planning to build some kind of 2d racing where you see everything from above. My car is a bitmap and my track is a bitmap(haven&#39;t done it yet). When I press left and right i will not move the bitmap(with x++) I want to  rotate the car bitmap! How to do that, a function?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Karamell Kungen)</author>
		<pubDate>Wed, 31 Dec 2003 00:27:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> <a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>sprite, <span class="k1">int</span> x, <span class="k1">int</span> y, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
Does just that. It&#39;s just like a normal sprite drawing function, but the angle argument will rotate it in &quot;allegro degrees&quot; (which are 0.0 to 255.0). (IIRC) Where 0 is up, 64 is right, 128 is down, and 192 is left.</p><p>If you want to make it turn, all you need to do is increase/decrease a fixed (or &quot;fix&quot;) variable.
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>&#160;</td></tr><tr><td class="number">2</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">3</td><td><span class="k2">{</span></td></tr><tr><td class="number">4</td><td>fix angle<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="k1">do</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.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span><span class="k2">)</span><span class="k2">{</span>angle--<span class="k2">;</span> <span class="k1">if</span><span class="k2">(</span>angle <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>angle<span class="k3">=</span><span class="n">255</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">8</td><td><span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span><span class="k2">{</span>angle<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span> <span class="k1">if</span><span class="k2">(</span>angle <span class="k3">&gt;</span> <span class="n">255</span><span class="k2">)</span>angle <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">9</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_ESC<span class="k2">)</span><span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td><a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, mysprite, <span class="n">320</span>, <span class="n">240</span>, angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td><span class="k2">}</span><span class="k1">while</span><span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

A &quot;fix&quot; won&#39;t work if your using C (as opposed to C++). The difference is that fix does nessicary conversions between other variable types. I&#39;d recommend reading the &quot;Fixed point math routines&quot; section of the Allegro Manual for more on that.</p><p>If I forgot anything, feel free to ask.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Wed, 31 Dec 2003 00:38:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>it&#39;s
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle<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><span class="k2">{</span>angle <span class="k3">=</span> angle <span class="k3">-</span> <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>

<a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, mysprite, <span class="n">320</span>, <span class="n">240</span>, angle<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
alternately
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> angle<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><span class="k2">{</span>angle--<span class="k2">;</span><span class="k2">}</span>

<a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, mysprite, <span class="n">320</span>, <span class="n">240</span>, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Wed, 31 Dec 2003 00:53:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>thanks <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>hmm this is a problem i should solve by myself but  I can&#39;t :/ When I press left/right the angle var changes but if I want the car to move forward I press KEY_UP and then it should move in the angle direction.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Karamell Kungen)</author>
		<pubDate>Wed, 31 Dec 2003 02:34:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Steve: </p><p>fix is a C++ version of fixed with the operators overloaded, so conversion is done automatically. </p><p>Karamell:</p><p>For that you want sine ( sin(); ) and cosine ( cos(); ).</p><p>Where it would be (IIRC):
</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> myfunction<span class="k2">(</span><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>fix velocity, angle<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="k1">do</span><span class="k2">{</span></td></tr><tr><td class="number">6</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_UP<span class="k2">)</span>velocity<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span> <span class="c">//or += .5 or whatever you want.</span></td></tr><tr><td class="number">7</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_DOWN<span class="k2">)</span>velocity--<span class="k2">;</span></td></tr><tr><td class="number">8</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_LEFT<span class="k2">]</span><span class="k2">)</span><span class="k2">{</span>angle--<span class="k2">;</span> <span class="k1">if</span><span class="k2">(</span>angle <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>angle<span class="k3">=</span><span class="n">255</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">9</td><td><span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span><span class="k2">{</span>angle<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span> <span class="k1">if</span><span class="k2">(</span>angle <span class="k3">&gt;</span> <span class="n">255</span><span class="k2">)</span>angle <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span><span class="k2">}</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td><span class="c">//This converts the polar coordinents to cartesian.</span></td></tr><tr><td class="number">12</td><td>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> velocity<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>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> velocity<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td><span class="c">//Draw/etc</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td><span class="k2">}</span><span class="k1">while</span><span class="k2">(</span>whatever<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td><span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Wed, 31 Dec 2003 02:48:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m lost.  Is today &quot;build a game for a newbie&quot; day?  I think it should be today.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (brain21)</author>
		<pubDate>Wed, 31 Dec 2003 04:10:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m lost. Is what Steve and I wrote out suppost to be hard...? I took me about a minute tops to write my second post out.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Wed, 31 Dec 2003 04:16:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This code isn&#39;t right at all..<br />first &#39;angle&#39; is in Allegro (or whatever) degrees and later you use cos and sin with &#39;angle&#39;, so it should be in radians, but it isn&#39;t<br />I think that you should convert &#39;angle&#39; from Allegro Degrees to Radians, but that&#39;s not that hard</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// angle to normal degrees (0 to 360)</span>
angle <span class="k3">*</span><span class="k3">=</span> <span class="n">1</span>.<span class="n">40625</span><span class="k2">;</span>
<span class="c">// angle to radians (0 to 2Pi)</span>
angle <span class="k3">*</span><span class="k3">=</span> Pi <span class="k3">/</span> <span class="n">180</span><span class="k2">;</span>
<span class="c">// now you can use sin and cos</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (akOOma)</author>
		<pubDate>Sun, 04 Jan 2004 02:42:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Actually, I was (and still am) correct. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>Calling fsin and fcos on a fix, will give incorrect results, because fix (not fixed) automatically does type-conversions.</p><div class="quote_container"><div class="title">Allegro 4.1.12 Manual said:</div><div class="quote"><p>
You should not mix the fix class with the fixed typedef though, because the compiler will mistake the fixed values for regular integers and insert unnecessary conversions. For example, if x is an object of class fix, calling fixsqrt(x) will return the wrong result. You should use the overloaded sqrt(x) or x.sqrt() instead. 
</p></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Sun, 04 Jan 2004 02:55:16 +0000</pubDate>
	</item>
</rss>
