<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Matching bullet start x,y with point on sprite that gets rotated</title>
		<link>http://www.allegro.cc/forums/view/590331</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 02 Mar 2007 07:31:48 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am currently making a space shooter game as a learning experience and am having trouble with matching up the bullet&#39;s start point and the point of fire on a sprite that rotates. I keep drawing a blank when I try to solve this problem, though I have a method that semi-works. If someone can point me in the right direction that&#39;d be great. Also, does anyone know why I have to use itofix() on a fixed variable for use with fixsin() and fixcos()(Lines 37 and 38)? Code is below, not the best as I&#39;m still learning. My temporary fix is on lines 134 to 147(end).
</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="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;vector&gt;</span></td></tr><tr><td class="number">3</td><td><span class="p">#include "data.h"</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><span class="k1">const</span> <span class="k1">int</span> x_res <span class="k3">=</span> <span class="n">640</span>, y_res <span class="k3">=</span> <span class="n">480</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td><span class="k1">float</span> x <span class="k3">=</span> <span class="n">320</span>, y <span class="k3">=</span> <span class="n">240</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td><a href="http://www.allegro.cc/manual/PALETTE" target="_blank"><span class="a">PALETTE</span></a> palette<span class="k2">;</span></td></tr><tr><td class="number">8</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer<span class="k2">;</span></td></tr><tr><td class="number">9</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>spaceship<span class="k2">;</span></td></tr><tr><td class="number">10</td><td><a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a><span class="k3">*</span> images <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td>std::vector<span class="k3">&lt;</span>float&gt; ship_fire_x<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>std::vector<span class="k3">&lt;</span>float&gt; ship_fire_y<span class="k2">;</span></td></tr><tr><td class="number">14</td><td>std::vector<span class="k3">&lt;</span>float&gt; ship_fire_x_dir<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>std::vector<span class="k3">&lt;</span>float&gt; ship_fire_y_dir<span class="k2">;</span></td></tr><tr><td class="number">16</td><td>&#160;</td></tr><tr><td class="number">17</td><td><span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k1">void</span> deinit<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td><span class="k1">void</span> ship_fire<span class="k2">(</span><a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k3">&amp;</span> x_speed, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k3">&amp;</span> y_speed, <span class="k1">float</span><span class="k3">&amp;</span> x, <span class="k1">float</span><span class="k3">&amp;</span> y, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k3">&amp;</span> angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td><span class="k1">volatile</span> <span class="k1">long</span> speed_counter <span class="k3">=</span> <span class="n">0</span><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> increment_speed_counter<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">24</td><td><span class="k2">{</span></td></tr><tr><td class="number">25</td><td>     speed_counter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td><span class="k2">}</span></td></tr><tr><td class="number">27</td><td><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>increment_speed_counter<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">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">30</td><td>  init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>&#160;</td></tr><tr><td class="number">32</td><td>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> x_dir,y_dir<span class="k2">;</span></td></tr><tr><td class="number">33</td><td>    <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a> angle <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>  <span class="k1">while</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_ESC<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">35</td><td>          <span class="k1">while</span> <span class="k2">(</span>speed_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">36</td><td>          <span class="k2">{</span></td></tr><tr><td class="number">37</td><td>               x_dir <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixsin" target="_blank"><span class="a">fixsin</span></a><span class="k2">(</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></td></tr><tr><td class="number">38</td><td>               y_dir <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixcos" target="_blank"><span class="a">fixcos</span></a><span class="k2">(</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></td></tr><tr><td class="number">39</td><td>               </td></tr><tr><td class="number">40</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><span class="k2">)</span></td></tr><tr><td class="number">41</td><td>               <span class="k2">{</span></td></tr><tr><td class="number">42</td><td>                     x <span class="k3">+</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span>x_dir<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>                     y <span class="k3">-</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span>y_dir<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td>               <span class="k2">}</span></td></tr><tr><td class="number">45</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></td></tr><tr><td class="number">46</td><td>               <span class="k2">{</span></td></tr><tr><td class="number">47</td><td>                    angle--<span class="k2">;</span></td></tr><tr><td class="number">48</td><td>               <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_RIGHT<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">50</td><td>               <span class="k2">{</span></td></tr><tr><td class="number">51</td><td>                    angle<span class="k3">+</span><span class="k3">+</span><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>               <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></td></tr><tr><td class="number">54</td><td>               <span class="k2">{</span></td></tr><tr><td class="number">55</td><td>                    ship_fire<span class="k2">(</span>x_dir, y_dir, x, y, angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>               <span class="k2">}</span></td></tr><tr><td class="number">57</td><td>               </td></tr><tr><td class="number">58</td><td>               <span class="k1">if</span><span class="k2">(</span>ship_fire_x.empty<span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span></td></tr><tr><td class="number">59</td><td>               <span class="k2">{</span></td></tr><tr><td class="number">60</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> ship_fire_x.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">61</td><td>                    <span class="k2">{</span></td></tr><tr><td class="number">62</td><td>                            ship_fire_x<span class="k3">&lt;</span>i&gt; <span class="k3">+</span><span class="k3">=</span> ship_fire_x_dir<span class="k3">&lt;</span>i&gt;<span class="k2">;</span></td></tr><tr><td class="number">63</td><td>                            ship_fire_y<span class="k3">&lt;</span>i&gt; <span class="k3">-</span><span class="k3">=</span> ship_fire_y_dir<span class="k3">&lt;</span>i&gt;<span class="k2">;</span></td></tr><tr><td class="number">64</td><td>                            <span class="k1">if</span><span class="k2">(</span>ship_fire_x<span class="k3">&lt;</span>i&gt; <span class="k3">&gt;</span> x_res <span class="k3">|</span><span class="k3">|</span> ship_fire_x<span class="k3">&lt;</span>i&gt; <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> ship_fire_y<span class="k3">&lt;</span>i&gt; <span class="k3">&gt;</span> y_res <span class="k3">|</span><span class="k3">|</span> ship_fire_y<span class="k3">&lt;</span>i&gt; <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">65</td><td>                            <span class="k2">{</span></td></tr><tr><td class="number">66</td><td>                                 ship_fire_x.erase<span class="k2">(</span>ship_fire_x.begin<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">67</td><td>                                 ship_fire_y.erase<span class="k2">(</span>ship_fire_y.begin<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">68</td><td>                                 ship_fire_x_dir.erase<span class="k2">(</span>ship_fire_x_dir.begin<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">69</td><td>                                 ship_fire_y_dir.erase<span class="k2">(</span>ship_fire_y_dir.begin<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">70</td><td>                            <span class="k2">}</span></td></tr><tr><td class="number">71</td><td>                    <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>               speed_counter--<span class="k2">;</span></td></tr><tr><td class="number">74</td><td>          <span class="k2">}</span></td></tr><tr><td class="number">75</td><td>&#160;</td></tr><tr><td class="number">76</td><td>          <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">/</span> <span class="n">2</span> <span class="k3">-</span> <span class="n">50</span>, <span class="n">20</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"%f"</span>, <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span>x_dir<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">77</td><td>          <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">/</span> <span class="n">2</span> <span class="k3">+</span> <span class="n">50</span>, <span class="n">20</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"%f"</span>, <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span>y_dir<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">78</td><td>          <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">/</span> <span class="n">2</span>, <span class="n">40</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"%i"</span>, ship_fire_x.size<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">79</td><td>          </td></tr><tr><td class="number">80</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> ship_fire_x.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">81</td><td>          <span class="k2">{</span></td></tr><tr><td class="number">82</td><td>               <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>buffer, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>ship_fire_x<span class="k3">&lt;</span>i&gt;, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>ship_fire_y<span class="k3">&lt;</span>i&gt;, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><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>          </td></tr><tr><td class="number">85</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, spaceship, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>x, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>y, <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></td></tr><tr><td class="number">86</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">87</td><td>          <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">88</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">89</td><td>&#160;</td></tr><tr><td class="number">90</td><td>  deinit<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">91</td><td>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">92</td><td><span class="k2">}</span></td></tr><tr><td class="number">93</td><td><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">94</td><td>&#160;</td></tr><tr><td class="number">95</td><td><span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">96</td><td>  <span class="k1">int</span> depth, res<span class="k2">;</span></td></tr><tr><td class="number">97</td><td>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">98</td><td>  depth <span class="k3">=</span> <a href="http://www.allegro.cc/manual/desktop_color_depth" target="_blank"><span class="a">desktop_color_depth</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">99</td><td>  <span class="k1">if</span> <span class="k2">(</span>depth <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> depth <span class="k3">=</span> <span class="n">32</span><span class="k2">;</span></td></tr><tr><td class="number">100</td><td>  <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>depth<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">101</td><td>  res <span class="k3">=</span> <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, x_res, y_res, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">102</td><td>  <span class="k1">if</span> <span class="k2">(</span>res <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">103</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/allegro_error" target="_blank"><span class="a">allegro_error</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">104</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">105</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">106</td><td>  <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">107</td><td>  <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">108</td><td>  </td></tr><tr><td class="number">109</td><td>  <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">110</td><td>  <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>increment_speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">111</td><td>  <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>increment_speed_counter, BPS_TO_TIMER<span class="k2">(</span><span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">112</td><td>  </td></tr><tr><td class="number">113</td><td>  <a href="http://www.allegro.cc/manual/generate_332_palette" target="_blank"><span class="a">generate_332_palette</span></a><span class="k2">(</span>palette<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">114</td><td>  buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span>x_res,y_res<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">115</td><td>  </td></tr><tr><td class="number">116</td><td>  images <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_datafile" target="_blank"><span class="a">load_datafile</span></a><span class="k2">(</span><span class="s">"data.dat"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">117</td><td>  <span class="k1">if</span><span class="k2">(</span>images <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">118</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">119</td><td>         <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_TEXT,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">120</td><td>         <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Could not load data.dat!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">121</td><td>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span>EXIT_FAILURE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">122</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">123</td><td>  </td></tr><tr><td class="number">124</td><td>  spaceship <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span><span class="k2">)</span>images<span class="k2">[</span>spaceship_image<span class="k2">]</span>.dat<span class="k2">;</span></td></tr><tr><td class="number">125</td><td><span class="k2">}</span></td></tr><tr><td class="number">126</td><td>&#160;</td></tr><tr><td class="number">127</td><td><span class="k1">void</span> deinit<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">128</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">129</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">130</td><td>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>spaceship<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">131</td><td>  <a href="http://www.allegro.cc/manual/unload_datafile" target="_blank"><span class="a">unload_datafile</span></a><span class="k2">(</span>images<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">132</td><td><span class="k2">}</span></td></tr><tr><td class="number">133</td><td>&#160;</td></tr><tr><td class="number">134</td><td><span class="k1">void</span> ship_fire<span class="k2">(</span><a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k3">&amp;</span> x_speed, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k3">&amp;</span> y_speed, <span class="k1">float</span><span class="k3">&amp;</span> x, <span class="k1">float</span><span class="k3">&amp;</span> y, <a href="http://www.allegro.cc/manual/fixed" target="_blank"><span class="a">fixed</span></a><span class="k3">&amp;</span> angle<span class="k2">)</span></td></tr><tr><td class="number">135</td><td><span class="k2">{</span></td></tr><tr><td class="number">136</td><td>    <span class="k1">float</span> offsetx <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span>x_speed<span class="k2">)</span> <span class="k3">*</span> <span class="n">17</span><span class="k2">;</span></td></tr><tr><td class="number">137</td><td>    <span class="k1">float</span> offsety <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span>y_speed<span class="k2">)</span> <span class="k3">*</span> <span class="n">15</span><span class="k2">;</span></td></tr><tr><td class="number">138</td><td>    <span class="k1">float</span> vx <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span>x_speed<span class="k2">)</span> <span class="k3">*</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">139</td><td>    <span class="k1">float</span> vy <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span>y_speed<span class="k2">)</span> <span class="k3">*</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">140</td><td>    <span class="k1">float</span> xfinal <span class="k3">=</span> vx <span class="k3">+</span> x <span class="k3">+</span> offsetx <span class="k3">+</span> <span class="n">8</span><span class="k2">;</span></td></tr><tr><td class="number">141</td><td>    <span class="k1">float</span> yfinal <span class="k3">=</span> vy <span class="k3">+</span> y <span class="k3">-</span> offsety <span class="k3">+</span> <span class="n">15</span><span class="k2">;</span></td></tr><tr><td class="number">142</td><td>    </td></tr><tr><td class="number">143</td><td>    ship_fire_x.push_back<span class="k2">(</span>xfinal<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">144</td><td>    ship_fire_y.push_back<span class="k2">(</span>yfinal<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">145</td><td>    ship_fire_x_dir.push_back<span class="k2">(</span>vx<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">146</td><td>    ship_fire_y_dir.push_back<span class="k2">(</span>vy<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">147</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elvang)</author>
		<pubDate>Thu, 01 Mar 2007 07:37:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><sup><i>please note that I only skimmed through the code, so I might be missing something</i></sup></p><p>First, take the sprite without rotation. You decide on some coordinates (x, y) that is the origin for bullets.</p><p>Now, when the ship rotates, the coordinates for this origin point should also rotate. The relevant equations are:</p><p>x&#39; = x cos(angle) - y sin(angle)<br />y&#39; = y cos(angle) + x sin(angle)</p><p>Where (x&#39;, y&#39;) are the new coordinates of the point after the rotation by &quot;angle&quot;. Please note that these equations are for the Y axis going up, like in standard math. On the computer screen, it&#39;s usually the other way, so you&#39;ll have to switch things around a little.<br />They also assume that you are rotating about (0,0), which might not be the case. If you&#39;re rotating about (u,v), you just add (u,v) to your (x,y), do the rotation, and then subtract (u,v) from (x&#39;, y&#39;).</p><p>About your itofix question, I&#39;m not sure what is it that you have a problem with. itofix converts an &quot;int&quot; into a &quot;fixed&quot;. Your angle variable is already a &quot;fixed&quot;, so you can use it with fix***() functions right away.</p><p>I strongly encourage that you just forget about fixeds, especially if you&#39;re learning. They&#39;ll just mess with your head. If you want to use them though, read the section of manual pertaining to them thoroughly.</p><p>Anyway, I&#39;m sure none of this makes sense, so wait until someone comes and translates <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jakub Wasilewski)</author>
		<pubDate>Thu, 01 Mar 2007 07:46:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok, after experimenting with it for awhile, I came up with this which is as close to it being accurate as I could get it. If I use (x,y) then the point of origin for the bullets goes all over the place. Also, if I don&#39;t do itofix(angle) then the value of x_trig and y_trig never change even though angle is already a fixed.</p><div class="source-code snippet"><div class="inner"><pre>    <span class="k1">float</span> x_trig <span class="k3">=</span> <span class="n">8</span>.<span class="n">5</span><span class="k3">*</span> <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/fixcos" target="_blank"><span class="a">fixcos</span></a><span class="k2">(</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> <span class="k3">+</span> <span class="n">16</span>.<span class="n">5</span><span class="k3">*</span> <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/fixsin" target="_blank"><span class="a">fixsin</span></a><span class="k2">(</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><span class="k2">;</span>
    <span class="k1">float</span> y_trig <span class="k3">=</span> <span class="n">16</span>.<span class="n">5</span><span class="k3">*</span> <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/fixcos" target="_blank"><span class="a">fixcos</span></a><span class="k2">(</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> <span class="k3">-</span> <span class="n">8</span>.<span class="n">5</span><span class="k3">*</span> <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/fixsin" target="_blank"><span class="a">fixsin</span></a><span class="k2">(</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> <span class="k3">-</span> <span class="n">16</span>.<span class="n">5</span><span class="k2">;</span>
</pre></div></div><p>


On a side note, up to what level should I take math? I stopped after Pre-Cal as I didn&#39;t see anything I would ever use in the Calculus book.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elvang)</author>
		<pubDate>Thu, 01 Mar 2007 09:06:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://en.wikipedia.org/wiki/Radian">Radians</a> make this sort of thing much easier. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>I can&#39;t really tell what your code is trying to do... Wish I had more time to read over it, but I believe it&#39;s similar to what&#39;s happening in <a href="http://www.allegro.cc/forums/thread/590313">this</a> post.</p><p>Okay, radians are 0 to pi*2 for a full rotation. The <tt>rotate_sprite</tt> function does require a fixed however, so lets deal with that first.<br /><span class="source-code"><a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>bmp,sprite,ship.x,ship.y,<a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a><span class="k2">(</span>ship.angle<span class="k3">*</span><span class="n">128</span>.<span class="n">0</span><span class="k3">/</span>M_PI<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span></p><p>As for the bullet&#39;s initial position and velocity,
</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">struct</span> Ship<span class="k2">{</span></td></tr><tr><td class="number">2</td><td>  <span class="k1">float</span> x,y<span class="k2">;</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">float</span> velX,velY<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  <span class="k1">float</span> angle<span class="k2">;</span>    <span class="c">//stored in radians. if you want to change the angle,</span></td></tr><tr><td class="number">5</td><td>                  <span class="c">//don't forget to do it in small amounts... Like +/- 0.005</span></td></tr><tr><td class="number">6</td><td><span class="k2">}</span>ship<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="k1">struct</span> Bullet<span class="k2">{</span></td></tr><tr><td class="number">9</td><td>  <span class="k1">float</span> x,y<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  <span class="k1">float</span> velX,velY<span class="k2">;</span></td></tr><tr><td class="number">11</td><td><span class="k2">}</span>bullet<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td><span class="k1">float</span> dist<span class="k3">=</span><span class="n">20</span><span class="k2">;</span><span class="c">//distance away from the ship</span></td></tr><tr><td class="number">14</td><td>bullet.x<span class="k3">=</span>dist<span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>ship.angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>bullet.y<span class="k3">=</span>dist<span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>ship.angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>bullet.velX<span class="k3">=</span>speed<span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>ship.angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>bullet.velY<span class="k3">=</span>speed<span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>ship.angle<span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ceagon Xylas)</author>
		<pubDate>Thu, 01 Mar 2007 09:34:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Power is back on, woot.</p><p>Ok, I have converted over to radians and included math.h so I don&#39;t have to deal with fixed variables. I don&#39;t see how your solution determines the point of origin on a rotating sprite though. Heres my new code(does the same as above code but easier to read). Something is wrong with the formula used to determine the point of origin of the bullets still as they appear outside the bounds of the arena. Also, shouldn&#39;t sine be used with x and cosine with y on your formulas?</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="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;vector&gt;</span></td></tr><tr><td class="number">3</td><td><span class="p">#include &lt;math.h&gt;</span></td></tr><tr><td class="number">4</td><td><span class="p">#include "data.h" // Images data file header</span></td></tr><tr><td class="number">5</td><td><span class="p">#define PI 3.1415926535</span></td></tr><tr><td class="number">6</td><td><span class="k1">const</span> <span class="k1">int</span> x_res <span class="k3">=</span> <span class="n">640</span>, y_res <span class="k3">=</span> <span class="n">480</span><span class="k2">;</span>   <span class="c">// Screen resolution</span></td></tr><tr><td class="number">7</td><td><a href="http://www.allegro.cc/manual/PALETTE" target="_blank"><span class="a">PALETTE</span></a> palette<span class="k2">;</span></td></tr><tr><td class="number">8</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer<span class="k2">;</span></td></tr><tr><td class="number">9</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>spaceship<span class="k2">;</span>     <span class="c">// Player's ship</span></td></tr><tr><td class="number">10</td><td><a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a><span class="k3">*</span> images <span class="k3">=</span> NULL<span class="k2">;</span>  <span class="c">// Images datafile</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><span class="k1">struct</span> Projectile <span class="k2">{</span></td></tr><tr><td class="number">13</td><td>       <span class="k1">float</span> x, vx<span class="k2">;</span> <span class="c">// X coordinate and velocity</span></td></tr><tr><td class="number">14</td><td>       <span class="k1">float</span> y, vy<span class="k2">;</span> <span class="c">// Y coordinate and velocity</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="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>std::vector<span class="k3">&lt;</span>Projectile&gt; bullet<span class="k2">;</span>    <span class="c">// Hold's individual data on each shot</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td><span class="k1">struct</span> Spaceship <span class="k2">{</span></td></tr><tr><td class="number">20</td><td>       <span class="k1">float</span> x, vx<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>       <span class="k1">float</span> y, vy<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>       <span class="k1">float</span> angle<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>       <span class="k1">float</span> thrust, turn_speed<span class="k2">;</span>    <span class="c">// Ship maneuverability</span></td></tr><tr><td class="number">24</td><td>       <span class="k2">}</span> player_ship<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> init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td><span class="k1">void</span> deinit<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td><span class="k1">void</span> player_fire<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td><span class="c">//////// Speed Control ////////</span></td></tr><tr><td class="number">30</td><td><span class="k1">volatile</span> <span class="k1">long</span> speed_counter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>&#160;</td></tr><tr><td class="number">32</td><td><span class="k1">void</span> increment_speed_counter<span class="k2">(</span><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>     speed_counter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td><span class="k2">}</span></td></tr><tr><td class="number">36</td><td><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>increment_speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td><span class="c">//////// Main() ////////</span></td></tr><tr><td class="number">38</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">39</td><td><span class="k2">{</span></td></tr><tr><td class="number">40</td><td>    init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    </td></tr><tr><td class="number">42</td><td>    <span class="k1">while</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_ESC<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">43</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">44</td><td>         <span class="k1">while</span><span class="k2">(</span> speed_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">45</td><td>         <span class="k2">{</span></td></tr><tr><td class="number">46</td><td>                player_ship.vx <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>player_ship.angle<span class="k2">)</span> <span class="k3">*</span> player_ship.thrust<span class="k2">;</span></td></tr><tr><td class="number">47</td><td>                player_ship.vy <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>player_ship.angle<span class="k2">)</span> <span class="k3">*</span> player_ship.thrust<span class="k2">;</span></td></tr><tr><td class="number">48</td><td>                </td></tr><tr><td class="number">49</td><td>                <span class="k1">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></td></tr><tr><td class="number">50</td><td>                <span class="k2">{</span></td></tr><tr><td class="number">51</td><td>                     player_ship.x <span class="k3">+</span><span class="k3">=</span> player_ship.vx<span class="k2">;</span></td></tr><tr><td class="number">52</td><td>                     player_ship.y <span class="k3">-</span><span class="k3">=</span> player_ship.vy<span class="k2">;</span></td></tr><tr><td class="number">53</td><td>                <span class="k2">}</span></td></tr><tr><td class="number">54</td><td>                </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_LEFT<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">56</td><td>                     player_ship.angle <span class="k3">-</span><span class="k3">=</span> player_ship.turn_speed<span class="k2">;</span></td></tr><tr><td class="number">57</td><td>                </td></tr><tr><td class="number">58</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></td></tr><tr><td class="number">59</td><td>                     player_ship.angle <span class="k3">+</span><span class="k3">=</span> player_ship.turn_speed<span class="k2">;</span></td></tr><tr><td class="number">60</td><td>                </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_SPACE<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">62</td><td>                     player_fire<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td>                </td></tr><tr><td class="number">64</td><td>                <span class="k1">if</span><span class="k2">(</span>bullet.empty<span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span></td></tr><tr><td class="number">65</td><td>                <span class="k2">{</span></td></tr><tr><td class="number">66</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> bullet.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">67</td><td>                     <span class="k2">{</span></td></tr><tr><td class="number">68</td><td>                          bullet<span class="k3">&lt;</span>i&gt;.x <span class="k3">+</span><span class="k3">=</span> bullet<span class="k3">&lt;</span>i&gt;.vx<span class="k2">;</span></td></tr><tr><td class="number">69</td><td>                          bullet<span class="k3">&lt;</span>i&gt;.y <span class="k3">-</span><span class="k3">=</span> bullet<span class="k3">&lt;</span>i&gt;.vy<span class="k2">;</span></td></tr><tr><td class="number">70</td><td>                          </td></tr><tr><td class="number">71</td><td>                          <span class="k1">if</span><span class="k2">(</span>bullet<span class="k3">&lt;</span>i&gt;.x <span class="k3">&gt;</span> x_res <span class="k3">|</span><span class="k3">|</span> bullet<span class="k3">&lt;</span>i&gt;.x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> bullet<span class="k3">&lt;</span>i&gt;.y <span class="k3">&gt;</span> y_res <span class="k3">|</span><span class="k3">|</span> bullet<span class="k3">&lt;</span>i&gt;.y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">72</td><td>                               bullet.erase<span class="k2">(</span>bullet.begin<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">73</td><td>                     <span class="k2">}</span></td></tr><tr><td class="number">74</td><td>                <span class="k2">}</span></td></tr><tr><td class="number">75</td><td>                     </td></tr><tr><td class="number">76</td><td>                speed_counter--<span class="k2">;</span></td></tr><tr><td class="number">77</td><td>         <span class="k2">}</span></td></tr><tr><td class="number">78</td><td>         </td></tr><tr><td class="number">79</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> bullet.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">80</td><td>              <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>buffer, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>bullet<span class="k3">&lt;</span>i&gt;.x, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>bullet<span class="k3">&lt;</span>i&gt;.y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">81</td><td>         </td></tr><tr><td class="number">82</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, spaceship, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>player_ship.x, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>player_ship.y, <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a><span class="k2">(</span>player_ship.angle<span class="k3">*</span><span class="n">128</span>.<span class="n">0</span><span class="k3">/</span>PI<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">83</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">84</td><td>         <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">85</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">86</td><td>    </td></tr><tr><td class="number">87</td><td>    deinit<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">88</td><td>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">89</td><td><span class="k2">}</span> <a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">90</td><td><span class="c">//////// Initialization ////////</span></td></tr><tr><td class="number">91</td><td><span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">92</td><td>  <span class="k1">int</span> depth, res<span class="k2">;</span></td></tr><tr><td class="number">93</td><td>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">94</td><td>  depth <span class="k3">=</span> <a href="http://www.allegro.cc/manual/desktop_color_depth" target="_blank"><span class="a">desktop_color_depth</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">95</td><td>  <span class="k1">if</span> <span class="k2">(</span>depth <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> depth <span class="k3">=</span> <span class="n">32</span><span class="k2">;</span></td></tr><tr><td class="number">96</td><td>  <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>depth<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">97</td><td>  res <span class="k3">=</span> <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, x_res, y_res, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">98</td><td>  <span class="k1">if</span> <span class="k2">(</span>res <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">99</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/allegro_error" target="_blank"><span class="a">allegro_error</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">100</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">101</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">102</td><td>  <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">103</td><td>  <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">104</td><td>  </td></tr><tr><td class="number">105</td><td>  <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">106</td><td>  <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>increment_speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">107</td><td>  <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>increment_speed_counter, BPS_TO_TIMER<span class="k2">(</span><span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">108</td><td>  </td></tr><tr><td class="number">109</td><td>  <a href="http://www.allegro.cc/manual/generate_332_palette" target="_blank"><span class="a">generate_332_palette</span></a><span class="k2">(</span>palette<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">110</td><td>  buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span>x_res,y_res<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">111</td><td>  images <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_datafile" target="_blank"><span class="a">load_datafile</span></a><span class="k2">(</span><span class="s">"data.dat"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">112</td><td>  <span class="k1">if</span><span class="k2">(</span>images <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">113</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">114</td><td>         <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_TEXT,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">115</td><td>         <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Could not load data.dat!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">116</td><td>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span>EXIT_FAILURE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">117</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">118</td><td>  spaceship <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span><span class="k2">)</span>images<span class="k2">[</span>spaceship_image<span class="k2">]</span>.dat<span class="k2">;</span></td></tr><tr><td class="number">119</td><td>  </td></tr><tr><td class="number">120</td><td>  player_ship.angle <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">121</td><td>  player_ship.x <span class="k3">=</span> x_res <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">122</td><td>  player_ship.y <span class="k3">=</span> y_res <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">123</td><td>  player_ship.turn_speed <span class="k3">=</span> <span class="n">0</span>.<span class="n">03</span><span class="k2">;</span></td></tr><tr><td class="number">124</td><td>  player_ship.thrust <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">125</td><td><span class="k2">}</span></td></tr><tr><td class="number">126</td><td><span class="c">//////// Deinitialization ////////</span></td></tr><tr><td class="number">127</td><td><span class="k1">void</span> deinit<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">128</td><td><span class="k2">{</span></td></tr><tr><td class="number">129</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">130</td><td>     <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">131</td><td>     <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>spaceship<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">132</td><td>     <a href="http://www.allegro.cc/manual/unload_datafile" target="_blank"><span class="a">unload_datafile</span></a><span class="k2">(</span>images<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">133</td><td><span class="k2">}</span></td></tr><tr><td class="number">134</td><td><span class="c">//////// Projectile Firing ////////</span></td></tr><tr><td class="number">135</td><td><span class="k1">void</span> player_fire<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">136</td><td><span class="k2">{</span></td></tr><tr><td class="number">137</td><td>     Projectile temp_bullet<span class="k2">;</span></td></tr><tr><td class="number">138</td><td>     temp_bullet.speed <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">139</td><td>     <span class="k1">int</span> spawn_distance <span class="k3">=</span> <span class="n">17</span><span class="k2">;</span></td></tr><tr><td class="number">140</td><td>     temp_bullet.vx <span class="k3">=</span> temp_bullet.speed <span class="k3">*</span> player_ship.vx<span class="k2">;</span></td></tr><tr><td class="number">141</td><td>     temp_bullet.vy <span class="k3">=</span> temp_bullet.speed <span class="k3">*</span> player_ship.vy<span class="k2">;</span></td></tr><tr><td class="number">142</td><td>     temp_bullet.x <span class="k3">=</span> spawn_distance <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>player_ship.angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">143</td><td>     temp_bullet.y <span class="k3">=</span> spawn_distance <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>player_ship.angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">144</td><td>     </td></tr><tr><td class="number">145</td><td>     bullet.push_back<span class="k2">(</span>temp_bullet<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">146</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

EDIT: Is the problem that my sprite is 17x31?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elvang)</author>
		<pubDate>Thu, 01 Mar 2007 22:46:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Also, shouldn&#39;t sine be used with x and cosine with y on your formulas?
</p></div></div><p>
Nope: <img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/9/8/9805f5e7e5ad829c5b7376c03ca3212e.gif" alt="vec2b.gif" width="222" height="155" /></p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Is the problem that my sprite is 17x31?
</p></div></div><p>
Nope, you&#39;re simply going to change <tt>spawn_distance</tt> to the maximum width or height of your image. So <tt>spawn_distance=31;</tt> (May want to go with 32 to make it a little safer when finding it he bullet has hit anything)</p><p>Sorry, I wasn&#39;t quite thorough in explaining the starting x and y of the bullet. Simply start at the center of your ship, move it to the outside of the ship, then set it&#39;s velocities. Something like:
</p><div class="source-code snippet"><div class="inner"><pre>temp_bullet.x<span class="k3">=</span>player_ship.x<span class="k3">+</span>spaceship-&gt;w<span class="k3">/</span><span class="n">2</span><span class="k3">+</span>spawn_distance<span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>player_ship.angle<span class="k2">)</span><span class="k2">;</span>
temp_bullet.y<span class="k3">=</span>player_ship.y<span class="k3">+</span>spaceship-&gt;h<span class="k3">/</span><span class="n">2</span><span class="k3">+</span>spawn_distance<span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>player_ship.angle<span class="k2">)</span><span class="k2">;</span>
<span class="c">//...then the velocities the same as before</span>
</pre></div></div><p>

Side notes:<br />Your definition of PI is unnecessary. Simply call <tt>M_PI</tt></p><p>Using iterators with vectors will considerably speed up your program. I&#39;d change this block
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>bullet.empty<span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span>
  <span class="k2">{</span>
    <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> bullet.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
    <span class="k2">{</span>
      bullet<span class="k3">&lt;</span>i&gt;.x <span class="k3">+</span><span class="k3">=</span> bullet<span class="k3">&lt;</span>i&gt;.vx<span class="k2">;</span>
      bullet<span class="k3">&lt;</span>i&gt;.y <span class="k3">-</span><span class="k3">=</span> bullet<span class="k3">&lt;</span>i&gt;.vy<span class="k2">;</span>

      <span class="k1">if</span><span class="k2">(</span>bullet<span class="k3">&lt;</span>i&gt;.x <span class="k3">&gt;</span> x_res <span class="k3">|</span><span class="k3">|</span> bullet<span class="k3">&lt;</span>i&gt;.x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> bullet<span class="k3">&lt;</span>i&gt;.y <span class="k3">&gt;</span> y_res <span class="k3">|</span><span class="k3">|</span> bullet<span class="k3">&lt;</span>i&gt;.y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
        bullet.erase<span class="k2">(</span>bullet.begin<span class="k2">(</span><span class="k2">)</span> <span class="k3">+</span> i<span class="k2">)</span><span class="k2">;</span>
    <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>
To
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">for</span><span class="k2">(</span>vector<span class="k3">&lt;</span>Projectile&gt;::iterator i<span class="k3">=</span>bullet.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">!</span><span class="k3">=</span>bullet.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
  i-&gt;x<span class="k3">+</span><span class="k3">=</span>i-&gt;vx<span class="k2">;</span>
  i-&gt;y-<span class="k3">=</span>i-&gt;vy<span class="k2">;</span>
  <span class="k1">if</span><span class="k2">(</span>i-&gt;x <span class="k3">&gt;</span> x_res <span class="k3">|</span><span class="k3">|</span> i-&gt;x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> i-&gt;y <span class="k3">&gt;</span> y_res <span class="k3">|</span><span class="k3">|</span> i-&gt;y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
    <span class="c">//This simply swaps the bullet that needs to be deleted</span>
    <span class="c">//with the last element in the vector and deletes it.</span>
    <span class="c">//Much faster than resizing the entire vector.</span>
    <span class="k1">if</span><span class="k2">(</span>i<span class="k3">&lt;</span>bullet.size<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span>
      <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span><span class="k3">&amp;</span>bullet<span class="k3">&lt;</span>i&gt;,<span class="k3">&amp;</span>bullet.back<span class="k2">(</span><span class="k2">)</span>,<span class="k1">sizeof</span><span class="k2">(</span>bullets<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
    bullet.pop_back<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ceagon Xylas)</author>
		<pubDate>Fri, 02 Mar 2007 02:16:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ceagon: You&#39;re still not rotating an arbitrary point, which (I assume) is what the OP asked for.</p><p>Elvang: just follow Jakub&#39;s post, and make sure to ditch all that silly fixed point math and instead use floats/doubles and radians.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Fri, 02 Mar 2007 02:19:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok, using Ceagon&#39;s formulas(with some modification, for some reason the point was 64  radians(90 degrees) over what it should have been...) it works. When I first looked into how to go about getting rid of the bullets that went out of range I was going to use an iterator, but I have no experience with them. As such, I cannot decipher what is wrong with these two lines, even after extensive searching and reading <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>i <span class="k3">&lt;</span> bullet.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span>
     <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span> <span class="k3">&amp;</span>bullet<span class="k3">&lt;</span>i&gt;, <span class="k3">&amp;</span>bullet.back<span class="k2">(</span><span class="k2">)</span>, <span class="k1">sizeof</span><span class="k2">(</span>bullet<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>   </p><p>Heres all of my current code.
</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="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;vector&gt;</span></td></tr><tr><td class="number">3</td><td><span class="p">#include &lt;math.h&gt;</span></td></tr><tr><td class="number">4</td><td><span class="p">#include "data.h" // Images data file header</span></td></tr><tr><td class="number">5</td><td>&#160;</td></tr><tr><td class="number">6</td><td><span class="k1">const</span> <span class="k1">int</span> x_res <span class="k3">=</span> <span class="n">640</span>, y_res <span class="k3">=</span> <span class="n">480</span><span class="k2">;</span>   <span class="c">// Screen resolution</span></td></tr><tr><td class="number">7</td><td><a href="http://www.allegro.cc/manual/PALETTE" target="_blank"><span class="a">PALETTE</span></a> palette<span class="k2">;</span></td></tr><tr><td class="number">8</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>buffer<span class="k2">;</span></td></tr><tr><td class="number">9</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>spaceship<span class="k2">;</span>     <span class="c">// Player's ship</span></td></tr><tr><td class="number">10</td><td><a href="http://www.allegro.cc/manual/DATAFILE" target="_blank"><span class="a">DATAFILE</span></a><span class="k3">*</span> images <span class="k3">=</span> NULL<span class="k2">;</span>  <span class="c">// Images datafile</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><span class="k1">struct</span> Projectile <span class="k2">{</span></td></tr><tr><td class="number">13</td><td>       <span class="k1">float</span> x, vx<span class="k2">;</span> <span class="c">// X coordinate and velocity</span></td></tr><tr><td class="number">14</td><td>       <span class="k1">float</span> y, vy<span class="k2">;</span> <span class="c">// Y coordinate and velocity</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="k2">}</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>std::vector<span class="k3">&lt;</span>Projectile&gt; bullet<span class="k2">;</span>    <span class="c">// Hold's individual data on each shot</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td><span class="k1">struct</span> Spaceship <span class="k2">{</span></td></tr><tr><td class="number">20</td><td>       <span class="k1">float</span> x, vx<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>       <span class="k1">float</span> y, vy<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>       <span class="k1">float</span> angle<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>       <span class="k1">float</span> thrust, turn_speed<span class="k2">;</span>    <span class="c">// Ship maneuverability</span></td></tr><tr><td class="number">24</td><td>       <span class="k2">}</span> player_ship<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> init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td><span class="k1">void</span> deinit<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td><span class="k1">void</span> player_fire<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td><span class="c">//////// Speed Control ////////</span></td></tr><tr><td class="number">30</td><td><span class="k1">volatile</span> <span class="k1">long</span> speed_counter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>&#160;</td></tr><tr><td class="number">32</td><td><span class="k1">void</span> increment_speed_counter<span class="k2">(</span><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>     speed_counter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td><span class="k2">}</span></td></tr><tr><td class="number">36</td><td><a href="http://www.allegro.cc/manual/END_OF_FUNCTION" target="_blank"><span class="a">END_OF_FUNCTION</span></a><span class="k2">(</span>increment_speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td><span class="c">//////// Main() ////////</span></td></tr><tr><td class="number">38</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">39</td><td><span class="k2">{</span></td></tr><tr><td class="number">40</td><td>    init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>    </td></tr><tr><td class="number">42</td><td>    <span class="k1">while</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_ESC<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">43</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">44</td><td>         <span class="k1">while</span><span class="k2">(</span> speed_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">45</td><td>         <span class="k2">{</span></td></tr><tr><td class="number">46</td><td>                player_ship.vx <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>player_ship.angle<span class="k2">)</span> <span class="k3">*</span> player_ship.thrust<span class="k2">;</span></td></tr><tr><td class="number">47</td><td>                player_ship.vy <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>player_ship.angle<span class="k2">)</span> <span class="k3">*</span> player_ship.thrust<span class="k2">;</span></td></tr><tr><td class="number">48</td><td>                </td></tr><tr><td class="number">49</td><td>                <span class="k1">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></td></tr><tr><td class="number">50</td><td>                <span class="k2">{</span></td></tr><tr><td class="number">51</td><td>                     player_ship.x <span class="k3">+</span><span class="k3">=</span> player_ship.vx<span class="k2">;</span></td></tr><tr><td class="number">52</td><td>                     player_ship.y <span class="k3">-</span><span class="k3">=</span> player_ship.vy<span class="k2">;</span></td></tr><tr><td class="number">53</td><td>                <span class="k2">}</span></td></tr><tr><td class="number">54</td><td>                </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_LEFT<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">56</td><td>                     player_ship.angle <span class="k3">-</span><span class="k3">=</span> player_ship.turn_speed<span class="k2">;</span></td></tr><tr><td class="number">57</td><td>                </td></tr><tr><td class="number">58</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></td></tr><tr><td class="number">59</td><td>                     player_ship.angle <span class="k3">+</span><span class="k3">=</span> player_ship.turn_speed<span class="k2">;</span></td></tr><tr><td class="number">60</td><td>                </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_SPACE<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">62</td><td>                     player_fire<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td>                </td></tr><tr><td class="number">64</td><td>                <span class="k1">if</span><span class="k2">(</span>bullet.empty<span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span></td></tr><tr><td class="number">65</td><td>                <span class="k2">{</span>     <span class="c">// Snippet start</span></td></tr><tr><td class="number">66</td><td>                     <span class="k1">for</span><span class="k2">(</span>std::vector<span class="k3">&lt;</span>Projectile&gt;::iterator i <span class="k3">=</span> bullet.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i <span class="k3">!</span><span class="k3">=</span> bullet.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> </td></tr><tr><td class="number">67</td><td>                     <span class="k2">{</span></td></tr><tr><td class="number">68</td><td>                          i-&gt;x <span class="k3">+</span><span class="k3">=</span> i-&gt;vx<span class="k2">;</span></td></tr><tr><td class="number">69</td><td>                          i-&gt;y <span class="k3">-</span><span class="k3">=</span> i-&gt;vy<span class="k2">;</span></td></tr><tr><td class="number">70</td><td>                          <span class="k1">if</span><span class="k2">(</span>i-&gt;x <span class="k3">&gt;</span> x_res <span class="k3">|</span><span class="k3">|</span> i-&gt;x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> i-&gt;y <span class="k3">&gt;</span> y_res <span class="k3">|</span><span class="k3">|</span> i-&gt;y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> </td></tr><tr><td class="number">71</td><td>                          <span class="k2">{</span></td></tr><tr><td class="number">72</td><td>                          <span class="c">//This simply swaps the bullet that needs to be deleted</span></td></tr><tr><td class="number">73</td><td>                          <span class="c">//with the last element in the vector and deletes it.</span></td></tr><tr><td class="number">74</td><td>                          <span class="c">//Much faster than resizing the entire vector. Credit: Ceagon Xylas</span></td></tr><tr><td class="number">75</td><td>                               <span class="k1">if</span><span class="k2">(</span>i <span class="k3">&lt;</span> bullet.size<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span> <span class="n">1</span><span class="k2">)</span></td></tr><tr><td class="number">76</td><td>                                    <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span><span class="k3">&amp;</span>bullet<span class="k3">&lt;</span>i&gt;,<span class="k3">&amp;</span>bullet.back<span class="k2">(</span><span class="k2">)</span>,<span class="k1">sizeof</span><span class="k2">(</span>bullet<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">77</td><td>                               bullet.pop_back<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">78</td><td>                          <span class="k2">}</span></td></tr><tr><td class="number">79</td><td>                     <span class="k2">}</span><span class="c">// Snippet end</span></td></tr><tr><td class="number">80</td><td>                <span class="k2">}</span></td></tr><tr><td class="number">81</td><td>                     </td></tr><tr><td class="number">82</td><td>                speed_counter--<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>         </td></tr><tr><td class="number">85</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> bullet.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">86</td><td>              <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>buffer, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>bullet<span class="k3">&lt;</span>i&gt;.x, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>bullet<span class="k3">&lt;</span>i&gt;.y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">87</td><td>         </td></tr><tr><td class="number">88</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, spaceship, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>player_ship.x, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>player_ship.y, <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a><span class="k2">(</span>player_ship.angle<span class="k3">*</span><span class="n">128</span>.<span class="n">0</span><span class="k3">/</span>M_PI<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">89</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">90</td><td>         <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">91</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">92</td><td>    </td></tr><tr><td class="number">93</td><td>    deinit<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">94</td><td>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">95</td><td><span class="k2">}</span> <a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">96</td><td><span class="c">//////// Initialization ////////</span></td></tr><tr><td class="number">97</td><td><span class="k1">void</span> init<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">98</td><td>  <span class="k1">int</span> depth, res<span class="k2">;</span></td></tr><tr><td class="number">99</td><td>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">100</td><td>  depth <span class="k3">=</span> <a href="http://www.allegro.cc/manual/desktop_color_depth" target="_blank"><span class="a">desktop_color_depth</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">101</td><td>  <span class="k1">if</span> <span class="k2">(</span>depth <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> depth <span class="k3">=</span> <span class="n">32</span><span class="k2">;</span></td></tr><tr><td class="number">102</td><td>  <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>depth<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">103</td><td>  res <span class="k3">=</span> <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, x_res, y_res, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">104</td><td>  <span class="k1">if</span> <span class="k2">(</span>res <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">105</td><td>    <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/allegro_error" target="_blank"><span class="a">allegro_error</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">106</td><td>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">107</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">108</td><td>  <a href="http://www.allegro.cc/manual/install_timer" target="_blank"><span class="a">install_timer</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">109</td><td>  <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">110</td><td>  </td></tr><tr><td class="number">111</td><td>  <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">112</td><td>  <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>increment_speed_counter<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">113</td><td>  <a href="http://www.allegro.cc/manual/install_int_ex" target="_blank"><span class="a">install_int_ex</span></a><span class="k2">(</span>increment_speed_counter, BPS_TO_TIMER<span class="k2">(</span><span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">114</td><td>  </td></tr><tr><td class="number">115</td><td>  <a href="http://www.allegro.cc/manual/generate_332_palette" target="_blank"><span class="a">generate_332_palette</span></a><span class="k2">(</span>palette<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">116</td><td>  buffer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span>x_res,y_res<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">117</td><td>  images <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_datafile" target="_blank"><span class="a">load_datafile</span></a><span class="k2">(</span><span class="s">"data.dat"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">118</td><td>  <span class="k1">if</span><span class="k2">(</span>images <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">119</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">120</td><td>         <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_TEXT,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">121</td><td>         <a href="http://www.allegro.cc/manual/allegro_message" target="_blank"><span class="a">allegro_message</span></a><span class="k2">(</span><span class="s">"Could not load data.dat!"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">122</td><td>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span>EXIT_FAILURE<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">123</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">124</td><td>  spaceship <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span><span class="k2">)</span>images<span class="k2">[</span>spaceship_image<span class="k2">]</span>.dat<span class="k2">;</span></td></tr><tr><td class="number">125</td><td>  </td></tr><tr><td class="number">126</td><td>  player_ship.angle <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">127</td><td>  player_ship.x <span class="k3">=</span> x_res <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">128</td><td>  player_ship.y <span class="k3">=</span> y_res <span class="k3">/</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">129</td><td>  player_ship.turn_speed <span class="k3">=</span> <span class="n">0</span>.<span class="n">03</span><span class="k2">;</span></td></tr><tr><td class="number">130</td><td>  player_ship.thrust <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">131</td><td><span class="k2">}</span></td></tr><tr><td class="number">132</td><td><span class="c">//////// Deinitialization ////////</span></td></tr><tr><td class="number">133</td><td><span class="k1">void</span> deinit<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">134</td><td><span class="k2">{</span></td></tr><tr><td class="number">135</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">136</td><td>     <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">137</td><td>     <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>spaceship<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">138</td><td>     <a href="http://www.allegro.cc/manual/unload_datafile" target="_blank"><span class="a">unload_datafile</span></a><span class="k2">(</span>images<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">139</td><td><span class="k2">}</span></td></tr><tr><td class="number">140</td><td><span class="c">//////// Projectile Firing ////////</span></td></tr><tr><td class="number">141</td><td><span class="k1">void</span> player_fire<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">142</td><td><span class="k2">{</span></td></tr><tr><td class="number">143</td><td>     Projectile temp_bullet<span class="k2">;</span></td></tr><tr><td class="number">144</td><td>     temp_bullet.speed <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">145</td><td>     <span class="k1">float</span> spawn_distance <span class="k3">=</span> <span class="n">11</span><span class="k2">;</span></td></tr><tr><td class="number">146</td><td>     temp_bullet.vx <span class="k3">=</span> temp_bullet.speed <span class="k3">*</span> player_ship.vx<span class="k2">;</span></td></tr><tr><td class="number">147</td><td>     temp_bullet.vy <span class="k3">=</span> temp_bullet.speed <span class="k3">*</span> player_ship.vy<span class="k2">;</span></td></tr><tr><td class="number">148</td><td>     temp_bullet.x <span class="k3">=</span> <span class="k2">(</span>player_ship.x <span class="k3">+</span> spaceship-&gt;w<span class="k3">/</span><span class="n">2</span><span class="k2">)</span> <span class="k3">+</span> spawn_distance <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>player_ship.angle <span class="k3">-</span> <span class="n">64</span>.<span class="n">0</span><span class="k3">/</span>M_PI<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">149</td><td>     temp_bullet.y <span class="k3">=</span> <span class="k2">(</span>player_ship.y <span class="k3">+</span> spaceship-&gt;h<span class="k3">/</span><span class="n">2</span><span class="k2">)</span> <span class="k3">+</span> spawn_distance <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>player_ship.angle <span class="k3">-</span> <span class="n">64</span>.<span class="n">0</span><span class="k3">/</span>M_PI<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">150</td><td>     </td></tr><tr><td class="number">151</td><td>     bullet.push_back<span class="k2">(</span>temp_bullet<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">152</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elvang)</author>
		<pubDate>Fri, 02 Mar 2007 05:10:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh yuck, my brain totally pooped out on me. I mixed two ideas <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> So lets rework this.</p><p>Here&#39;s the two ideas I was mixing:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>bullet.empty<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="k2">{</span>
  <span class="k1">for</span><span class="k2">(</span>std::vector<span class="k3">&lt;</span>Projectile&gt;::iterator i <span class="k3">=</span> bullet.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i <span class="k3">!</span><span class="k3">=</span> bullet.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">/*nothing here*/</span><span class="k2">)</span> 
  <span class="k2">{</span>
    i-&gt;x <span class="k3">+</span><span class="k3">=</span> i-&gt;vx<span class="k2">;</span>
    i-&gt;y <span class="k3">-</span><span class="k3">=</span> i-&gt;vy<span class="k2">;</span>
    <span class="k1">if</span><span class="k2">(</span>i-&gt;x <span class="k3">&gt;</span> x_res <span class="k3">|</span><span class="k3">|</span> i-&gt;x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> i-&gt;y <span class="k3">&gt;</span> y_res <span class="k3">|</span><span class="k3">|</span> i-&gt;y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
    <span class="k2">{</span>
      <span class="k1">if</span><span class="k2">(</span>i<span class="k3">!</span><span class="k3">=</span>bullet.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
        bullet.erase<span class="k2">(</span>i<span class="k2">)</span><span class="k2">;</span>
    <span class="k2">}</span>
    <span class="k1">else</span>
      i<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
  <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>

And</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">if</span><span class="k2">(</span><span class="k3">!</span>bullet.empty<span class="k2">(</span><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>  <span class="k1">for</span><span class="k2">(</span>std::vector<span class="k3">&lt;</span>Projectile&gt;::iterator i <span class="k3">=</span> bullet.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i <span class="k3">!</span><span class="k3">=</span> bullet.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">/*nothing here*/</span><span class="k2">)</span> </td></tr><tr><td class="number">4</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">5</td><td>    i-&gt;x <span class="k3">+</span><span class="k3">=</span> i-&gt;vx<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    i-&gt;y <span class="k3">-</span><span class="k3">=</span> i-&gt;vy<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">if</span><span class="k2">(</span>i-&gt;x <span class="k3">&gt;</span> x_res <span class="k3">|</span><span class="k3">|</span> i-&gt;x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> i-&gt;y <span class="k3">&gt;</span> y_res <span class="k3">|</span><span class="k3">|</span> i-&gt;y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">8</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>      <span class="k1">if</span><span class="k2">(</span>i<span class="k3">!</span><span class="k3">=</span>bullet.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span></td></tr><tr><td class="number">10</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">11</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span><span class="k3">&amp;</span><span class="k2">(</span><span class="k3">*</span>i<span class="k2">)</span>,<span class="k3">&amp;</span>bullet.back<span class="k2">(</span><span class="k2">)</span>,<span class="k1">sizeof</span><span class="k2">(</span>Projectile<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>        bullet.pop_back<span class="k2">(</span><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>    <span class="k2">}</span></td></tr><tr><td class="number">15</td><td>    <span class="k1">else</span></td></tr><tr><td class="number">16</td><td>      i<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

The last one&#39;s faster, but I&#39;m not sure if it&#39;s buggy <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> I&#39;d advise using the first if it doesn&#39;t give you any performance issues.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ceagon Xylas)</author>
		<pubDate>Fri, 02 Mar 2007 06:26:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>When it gets down to the last bullet in the vector the program now crashes with a &quot;instruction at &lt;insert address here&gt; referenced memory at &lt;insert address here&gt;. The memory could not be &#39;read&#39;.&quot; I&#39;m guessing the iterator doesn&#39;t like all the erases?</p><p>EDIT: Nvm, every time I go to reply your post has been updated heh...</p><p>Yea, the second one crashes after 4 or 5 bullets exit the screen. Was about to say first one was also buggy until I noticed the increments location changed as well... Actually, the second one works now that I noticed that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elvang)</author>
		<pubDate>Fri, 02 Mar 2007 06:50:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hahaha I know, I&#39;m such a lousy poster <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" /> I re-edit at least 20 times every post.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ceagon Xylas)</author>
		<pubDate>Fri, 02 Mar 2007 06:52:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So for everytime I need to cycle through a vector similar to this and possibly remove certain elements should I use that code?</p><p>Example of implementation for a lifespan for projectiles(Didn&#39;t want to repost entire source so I started at while and cut it off right after if(!bullet.empty())&#39;s closing brace).
</p><div class="source-code snippet"><div class="inner"><pre>         <span class="k1">while</span><span class="k2">(</span> speed_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
         <span class="k2">{</span>
                <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>bullet.empty<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
                <span class="k2">{</span>
                     <span class="k1">for</span><span class="k2">(</span>std::vector<span class="k3">&lt;</span>Projectile&gt;::iterator i <span class="k3">=</span> bullet.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i <span class="k3">!</span><span class="k3">=</span> bullet.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">)</span>
                     <span class="k2">{</span>
                          i-&gt;lifetime<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
                          <span class="k1">if</span><span class="k2">(</span>i-&gt;lifetime <span class="k3">&gt;</span><span class="k3">=</span> i-&gt;life_max<span class="k2">)</span>
                          <span class="k2">{</span>
                               <a href="http://www.delorie.com/djgpp/doc/libc/libc_566.html" target="_blank">memcpy</a><span class="k2">(</span><span class="k3">&amp;</span><span class="k2">(</span><span class="k3">*</span>i<span class="k2">)</span>,<span class="k3">&amp;</span>bullet.back<span class="k2">(</span><span class="k2">)</span>,<span class="k1">sizeof</span><span class="k2">(</span>Projectile<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
                               bullet.pop_back<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
                          <span class="k2">}</span>
                          <span class="k1">else</span>
                               i<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
                     <span class="k2">}</span>
                <span class="k2">}</span>
</pre></div></div><p>

EDIT: Nvm, just added in an extra check and variable increment to the existing for loop.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elvang)</author>
		<pubDate>Fri, 02 Mar 2007 07:09:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, I&#39;m pretty sure you could use that code every time you needed to find specific elements inside the vector and remove them. As long as the element meets the condition (in this case, <tt>i-&gt;lifetime&gt;=i-&gt;maxlife</tt>) it&#39;ll be switched with the last element in the vector and then deleted.</p><p>By the way, <tt>if(!bullet.empty())</tt> isn&#39;t necessary. If the vector&#39;s empty then <tt>i=bullet.end()</tt>, and the for loop will end immediately
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ceagon Xylas)</author>
		<pubDate>Fri, 02 Mar 2007 07:31:48 +0000</pubDate>
	</item>
</rss>
