<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>My Game runs Slow on PIII Machine</title>
		<link>http://www.allegro.cc/forums/view/590085</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 26 Feb 2007 09:05:12 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I got a 192 MB RAM and 933 Mhz PIII Machine. I was wondering why would my game run so slow on PIII Machines or below(although still acceptable)... I suspect this line...</p><p>install_int(GameTimer::incrementGameTicker, 10);</p><p>My game deoesn&#39;t seem to run at constant speed... Here is my ticker function...</p><p>void GameTimer::incrementGameTicker()<br />{<br />    game_ticker++;<br />}<br />END_OF_FUNCTION(incrementGameTicker); </p><p>Thanks!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (armond)</author>
		<pubDate>Thu, 15 Feb 2007 19:00:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It runs so slow because you are telling the timer to be really slow. Instead you should try <a href="http://allegro.cc/manual/api/timer-routines/install_int_ex">install_int_ex()</a> as it gives better options for setting the speed of the timer (I like BPS_TO_TIMER). Or you can try to just fiddling with that 10, lowering it, until you get a speed that you like.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jeff Bernard)</author>
		<pubDate>Thu, 15 Feb 2007 19:11:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This 100Hz timer (10ms) should run with no problem at all.<br />If something runs at varying speed, it&#39;s in your main program.<br />If you comment out the heaviest video operations (for example: background drawing), does it change the apparent speed?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Thu, 15 Feb 2007 20:35:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi! Sorry for the late response. I actually tried turning off everything leaving the ship to be the only thing visible. The scrolling background does take some time to process but it doesn&#39;t seem that heavy at all. I will try install_int_ex() and give you guys some feedback asap. Thanks!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (armond)</author>
		<pubDate>Mon, 19 Feb 2007 11:15:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Is the PIII the computer you compiled the program on?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (weapon_S)</author>
		<pubDate>Mon, 19 Feb 2007 16:19:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>weapon_S</p><p>Nope, it&#39;s not. But I was told that it wouldn&#39;t have any effect even if I compiled on that machine. I just run the binary there...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (armond)</author>
		<pubDate>Tue, 20 Feb 2007 14:34:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Care to share some more code? As in, a 20-100 line example that compiles as-is and reproduces the problem?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Tue, 20 Feb 2007 17:06:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Give us more details. If you are trying to scroll a 32bit screen on less than a 933Mhz Machine then I&#39;m not surprised if you start getting slowdown.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Wed, 21 Feb 2007 00:43:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sure thing. Here is the code for my PlayState class which functions as the main entry of the game. Perhaps you could point out some problems here...</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#include "globals.h"</span>
<span class="number">   2</span>
<span class="number">   3</span>PlayState::PlayState<span class="k2">(</span><span class="k2">)</span>
<span class="number">   4</span><span class="k2">{</span>
<span class="number">   5</span>    currentLevel <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">   6</span>
<span class="number">   7</span>    GameManager::game_score <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">   8</span>
<span class="number">   9</span>    <span class="c">//create buffer image</span>
<span class="number">  10</span>    GameManager::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><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number">  11</span>    
<span class="number">  12</span>    <span class="c">//load sprites</span>
<span class="number">  13</span>    BitmapManager::addBitmap<span class="k2">(</span>SHIP_SPRITE, <span class="s">"graphics/fs.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  14</span>    BitmapManager::addBitmap<span class="k2">(</span>VULCAN_SPRITE, <span class="s">"graphics/vulcan.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  15</span>    BitmapManager::addBitmap<span class="k2">(</span>ASTEROID_SPRITE_FLYING, <span class="s">"graphics/asteroid_flying.bmp"</span><span class="k2">)</span><span class="k2">;</span>    
<span class="number">  16</span>    BitmapManager::addBitmap<span class="k2">(</span>ASTEROID_SPRITE_DYING, <span class="s">"graphics/asteroid_destroyed.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  17</span>    BitmapManager::addBitmap<span class="k2">(</span>BULLET_HEAD_SPRITE_FLYING, <span class="s">"graphics/bullet_head_flying.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  18</span>    BitmapManager::addBitmap<span class="k2">(</span>SPRITE_EXPLOSION, <span class="s">"graphics/explosion.bmp"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span>    
<span class="number">  20</span>    <span class="c">//load SFX</span>
<span class="number">  21</span>    SoundManager::addSample<span class="k2">(</span>VULCAN_GUN_FIRE, <span class="s">"sfx/vulcan.wav"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  22</span>    
<span class="number">  23</span>    <span class="c">//ship = new Ship(BitmapManager::SHIP_SPRITE, 50, 50, 50, 32, 1);</span>
<span class="number">  24</span>    <span class="c">//Ship(int x, int y, int w, int h, int speed, int recoveryRate, int recoveryTime, Status stat, int lfe);</span>
<span class="number">  25</span>    ship <span class="k3">=</span> <span class="k1">new</span> Ship<span class="k2">(</span><span class="n">50</span>, <span class="n">50</span>, <span class="n">50</span>, <span class="n">45</span>, <span class="n">3</span>, <span class="n">5</span>, <span class="n">1000</span>, ALIVE, MAX_PLAYER_LIFE<span class="k2">)</span><span class="k2">;</span>
<span class="number">  26</span>    
<span class="number">  27</span>    <span class="c">//add a weapon for the ship</span>
<span class="number">  28</span>    ship-&gt;addWeapon<span class="k2">(</span>VULCAN_GUN, WeaponFactory::getWeapon<span class="k2">(</span>VULCAN_GUN<span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>    ship-&gt;setCurrentWeapon<span class="k2">(</span>VULCAN_GUN<span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>    ship-&gt;move<span class="k2">(</span><span class="n">0</span>, <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a> <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">  31</span><span class="k2">}</span>    
<span class="number">  32</span>
<span class="number">  33</span>PlayState::~PlayState<span class="k2">(</span><span class="k2">)</span>
<span class="number">  34</span><span class="k2">{</span>
<span class="number">  35</span>    BitmapManager::removeAll<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  36</span>    
<span class="number">  37</span>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>GameManager::buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  38</span>    
<span class="number">  39</span>    <span class="k1">delete</span> ship<span class="k2">;</span>
<span class="number">  40</span><span class="k2">}</span>
<span class="number">  41</span>
<span class="number">  42</span>PlayState<span class="k3">*</span> PlayState::getInstance<span class="k2">(</span><span class="k2">)</span>
<span class="number">  43</span><span class="k2">{</span>
<span class="number">  44</span>    <span class="k1">if</span> <span class="k2">(</span>instance <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number">  45</span>    <span class="k2">{</span>
<span class="number">  46</span>        instance <span class="k3">=</span> <span class="k1">new</span> PlayState<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  47</span>    <span class="k2">}</span>
<span class="number">  48</span>    
<span class="number">  49</span>    <span class="k1">return</span> instance<span class="k2">;</span>    
<span class="number">  50</span><span class="k2">}</span>    
<span class="number">  51</span>
<span class="number">  52</span><span class="k1">void</span> PlayState::init<span class="k2">(</span><span class="k2">)</span>
<span class="number">  53</span><span class="k2">{</span>
<span class="number">  54</span><span class="k2">}</span>
<span class="number">  55</span>
<span class="number">  56</span><span class="k1">void</span> PlayState::pause<span class="k2">(</span><span class="k2">)</span>
<span class="number">  57</span><span class="k2">{</span>
<span class="number">  58</span><span class="k2">}</span>
<span class="number">  59</span>
<span class="number">  60</span><span class="k1">void</span> PlayState::run<span class="k2">(</span><span class="k2">)</span>
<span class="number">  61</span><span class="k2">{</span>
<span class="number">  62</span>    GameStateManager::pushState<span class="k2">(</span> GameOverState::getInstance<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>     
<span class="number">  63</span>        GameStateManager::getCurrentState<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>run<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="c">//--execute run method</span>
<span class="number">  64</span>        GameStateManager::popState<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//--pop the element on top</span>
<span class="number">  65</span>                  
<span class="number">  66</span>    loadLevel<span class="k2">(</span>currentLevel<span class="k2">)</span><span class="k2">;</span>
<span class="number">  67</span>    
<span class="number">  68</span>    <span class="c">//begin main game loop</span>
<span class="number">  69</span>    <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="number">  70</span>    <span class="k2">{</span>   
<span class="number">  71</span>        
<span class="number">  72</span>        <span class="k1">while</span> <span class="k2">(</span>GameTimer::game_ticker <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  73</span>        <span class="k2">{</span>
<span class="number">  74</span>            <span class="c">//move left</span>
<span class="number">  75</span>            <span class="k1">if</span> <span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_A<span class="k2">]</span> <span class="k2">)</span>
<span class="number">  76</span>            <span class="k2">{</span>
<span class="number">  77</span>                ship-&gt;move<span class="k2">(</span> ship-&gt;x <span class="k3">-</span> ship-&gt;getSpeed<span class="k2">(</span><span class="k2">)</span>, ship-&gt;y <span class="k2">)</span><span class="k2">;</span>
<span class="number">  78</span>                <span class="k1">if</span> <span class="k2">(</span> ship-&gt;x <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number">  79</span>                <span class="k2">{</span>
<span class="number">  80</span>                    ship-&gt;move<span class="k2">(</span> ship-&gt;x <span class="k3">+</span> ship-&gt;getSpeed<span class="k2">(</span><span class="k2">)</span>, ship-&gt;y <span class="k2">)</span><span class="k2">;</span> 
<span class="number">  81</span>                <span class="k2">}</span>
<span class="number">  82</span>            <span class="k2">}</span>    
<span class="number">  83</span>            <span class="c">//move down</span>
<span class="number">  84</span>            <span class="k1">if</span> <span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_S<span class="k2">]</span> <span class="k2">)</span>
<span class="number">  85</span>            <span class="k2">{</span>
<span class="number">  86</span>                ship-&gt;move<span class="k2">(</span> ship-&gt;x, ship-&gt;y <span class="k3">+</span> ship-&gt;getSpeed<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">  87</span>            
<span class="number">  88</span>                <span class="k1">if</span> <span class="k2">(</span> <span class="k2">(</span>ship-&gt;y <span class="k3">+</span> ship-&gt;height<span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a> <span class="k2">)</span>
<span class="number">  89</span>                <span class="k2">{</span>
<span class="number">  90</span>                    ship-&gt;move<span class="k2">(</span> ship-&gt;x, ship-&gt;y <span class="k3">-</span> ship-&gt;getSpeed<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>                <span class="k2">}</span>
<span class="number">  92</span>            <span class="k2">}</span>    
<span class="number">  93</span>            <span class="c">//move right</span>
<span class="number">  94</span>            <span class="k1">if</span> <span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_D<span class="k2">]</span> <span class="k2">)</span>
<span class="number">  95</span>            <span class="k2">{</span>
<span class="number">  96</span>                ship-&gt;move<span class="k2">(</span> ship-&gt;x <span class="k3">+</span> ship-&gt;getSpeed<span class="k2">(</span><span class="k2">)</span>, ship-&gt;y <span class="k2">)</span><span class="k2">;</span>
<span class="number">  97</span>                
<span class="number">  98</span>                <span class="k1">if</span> <span class="k2">(</span> <span class="k2">(</span>ship-&gt;x <span class="k3">+</span> ship-&gt;width<span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">=</span> <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k2">)</span>
<span class="number">  99</span>                <span class="k2">{</span>
<span class="number"> 100</span>                     ship-&gt;move<span class="k2">(</span> ship-&gt;x <span class="k3">-</span> ship-&gt;getSpeed<span class="k2">(</span><span class="k2">)</span>, ship-&gt;y <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>                <span class="k2">}</span>
<span class="number"> 102</span>            <span class="k2">}</span>    
<span class="number"> 103</span>            <span class="c">//move up</span>
<span class="number"> 104</span>            <span class="k1">if</span> <span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_W<span class="k2">]</span> <span class="k2">)</span>
<span class="number"> 105</span>            <span class="k2">{</span>
<span class="number"> 106</span>                ship-&gt;move<span class="k2">(</span> ship-&gt;x, ship-&gt;y <span class="k3">-</span> ship-&gt;getSpeed<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 107</span>                
<span class="number"> 108</span>                <span class="k1">if</span> <span class="k2">(</span> ship-&gt;y <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">20</span> <span class="k2">)</span>
<span class="number"> 109</span>                <span class="k2">{</span>
<span class="number"> 110</span>                    ship-&gt;move<span class="k2">(</span> ship-&gt;x, ship-&gt;y <span class="k3">+</span> ship-&gt;getSpeed<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>     
<span class="number"> 111</span>                <span class="k2">}</span>
<span class="number"> 112</span>            <span class="k2">}</span>
<span class="number"> 113</span>            <span class="c">//fire weapon</span>
<span class="number"> 114</span>            <span class="k1">if</span> <span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_K<span class="k2">]</span> <span class="k2">)</span>
<span class="number"> 115</span>            <span class="k2">{</span>
<span class="number"> 116</span>                ship-&gt;fireWeapon<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>            <span class="k2">}</span>
<span class="number"> 118</span>            <span class="c">//change weapon</span>
<span class="number"> 119</span>            <span class="k1">if</span> <span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_TAB<span class="k2">]</span> <span class="k2">)</span>
<span class="number"> 120</span>            <span class="k2">{</span>
<span class="number"> 121</span>                 <span class="c">//ship-&gt;fireWeapon();</span>
<span class="number"> 122</span>            <span class="k2">}</span>
<span class="number"> 123</span>            <span class="c">//fire special</span>
<span class="number"> 124</span>            <span class="k1">if</span> <span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_L<span class="k2">]</span> <span class="k2">)</span>
<span class="number"> 125</span>            <span class="k2">{</span>
<span class="number"> 126</span>            <span class="k2">}</span>
<span class="number"> 127</span>            
<span class="number"> 128</span>            <span class="c">//exit to menu</span>
<span class="number"> 129</span>            <span class="k1">if</span> <span class="k2">(</span> <a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span> <span class="k2">)</span>
<span class="number"> 130</span>            <span class="k2">{</span>
<span class="number"> 131</span>                <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 132</span>            <span class="k2">}</span>    
<span class="number"> 133</span>            
<span class="number"> 134</span>            <span class="c">//scroll the background</span>
<span class="number"> 135</span>            bg-&gt;update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 136</span>            
<span class="number"> 137</span>            <span class="c">//animate the ship</span>
<span class="number"> 138</span>            ship-&gt;update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 139</span>            
<span class="number"> 140</span>            bg-&gt;draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>    
<span class="number"> 141</span>            
<span class="number"> 142</span>            <span class="c">//move all projectiles</span>
<span class="number"> 143</span>            <span class="k1">for</span> <span class="k2">(</span>std::vector<span class="k3">&lt;</span>Projectile<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator it <span class="k3">=</span> ProjectileFactory::projectilePool.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> ProjectileFactory::projectilePool.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>it<span class="k2">)</span>
<span class="number"> 144</span>            <span class="k2">{</span>                    
<span class="number"> 145</span>                <span class="k1">if</span> <span class="k2">(</span> <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>isVisible<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="number"> 146</span>                <span class="k2">{</span>
<span class="number"> 147</span>                    Projectile<span class="k3">*</span> p <span class="k3">=</span> <span class="k3">*</span>it<span class="k2">;</span>
<span class="number"> 148</span>                    p-&gt;update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//(*it)-&gt;update();</span>
<span class="number"> 149</span>                    p-&gt;draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//(*it)-&gt;draw();</span>
<span class="number"> 150</span>                    
<span class="number"> 151</span>                    <span class="c">//check for collision on bullet and enemies</span>
<span class="number"> 152</span>                    <span class="k1">for</span><span class="k2">(</span>std::vector<span class="k3">&lt;</span>Enemy<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator eit <span class="k3">=</span> EnemyFactory::enemyPool.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> eit <span class="k3">!</span><span class="k3">=</span> EnemyFactory::enemyPool.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>eit<span class="k2">)</span>
<span class="number"> 153</span>                    <span class="k2">{</span>                              
<span class="number"> 154</span>                        Enemy<span class="k3">*</span> e <span class="k3">=</span> <span class="k3">*</span>eit<span class="k2">;</span> 
<span class="number"> 155</span>                        
<span class="number"> 156</span>                        <span class="c">//projectile hits an enemy</span>
<span class="number"> 157</span>                        <span class="k1">if</span> <span class="k2">(</span> p-&gt;collides<span class="k2">(</span>e<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> p-&gt;isActive<span class="k2">(</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> e-&gt;isAlive<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 158</span>                        <span class="k2">{</span>
<span class="number"> 159</span>                             e-&gt;takeDamage<span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//TODO: change 1 to weapon power</span>
<span class="number"> 160</span>                             p-&gt;makeInactive<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 161</span>
<span class="number"> 162</span>                             <span class="c">//player killed the enemy                             </span>
<span class="number"> 163</span>                             <span class="k1">if</span> <span class="k2">(</span> <span class="k3">!</span><span class="k2">(</span> e-&gt;isAlive<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 164</span>                             <span class="k2">{</span>
<span class="number"> 165</span>                                 GameManager::game_score <span class="k3">+</span><span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>                                  
<span class="number"> 166</span>                             <span class="k2">}</span>
<span class="number"> 167</span>                             
<span class="number"> 168</span>                             <span class="c">//exit the inner loop</span>
<span class="number"> 169</span>                             <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 170</span>                        <span class="k2">}</span>
<span class="number"> 171</span>                    <span class="k2">}</span>                    
<span class="number"> 172</span>                    
<span class="number"> 173</span>                    <span class="k1">if</span> <span class="k2">(</span> <span class="k3">!</span><span class="k2">(</span> p-&gt;isActive<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 174</span>                    <span class="k2">{</span>
<span class="number"> 175</span>                        Projectile<span class="k3">*</span> p <span class="k3">=</span> <span class="k3">*</span>it<span class="k2">;</span>
<span class="number"> 176</span>                        it <span class="k3">=</span> ProjectileFactory::projectilePool.erase<span class="k2">(</span>it<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 177</span>                        <span class="c">// we must decrement, because it will be incremented when the loop starts over again</span>
<span class="number"> 178</span>                        <span class="k3">-</span><span class="k3">-</span>it<span class="k2">;</span>
<span class="number"> 179</span>                        <span class="k1">delete</span> p<span class="k2">;</span>                         
<span class="number"> 180</span>                    <span class="k2">}</span>
<span class="number"> 181</span>                    
<span class="number"> 182</span>                <span class="k2">}</span>
<span class="number"> 183</span>                <span class="k1">else</span>
<span class="number"> 184</span>                <span class="k2">{</span> 
<span class="number"> 185</span>                    Projectile<span class="k3">*</span> p <span class="k3">=</span> <span class="k3">*</span>it<span class="k2">;</span>
<span class="number"> 186</span>                    it <span class="k3">=</span> ProjectileFactory::projectilePool.erase<span class="k2">(</span>it<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 187</span>                    <span class="c">// we must decrement, because it will be incremented when the loop starts over again</span>
<span class="number"> 188</span>                    <span class="k3">-</span><span class="k3">-</span>it<span class="k2">;</span>
<span class="number"> 189</span>                    <span class="k1">delete</span> p<span class="k2">;</span>
<span class="number"> 190</span>                <span class="k2">}</span>  
<span class="number"> 191</span>            <span class="k2">}</span>    
<span class="number"> 192</span>            
<span class="number"> 193</span>            <span class="c">//move all enemies</span>
<span class="number"> 194</span>            <span class="k1">for</span><span class="k2">(</span>std::vector<span class="k3">&lt;</span>Enemy<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator it <span class="k3">=</span> EnemyFactory::enemyPool.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> EnemyFactory::enemyPool.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>it<span class="k2">)</span>
<span class="number"> 195</span>            <span class="k2">{</span>
<span class="number"> 196</span>                Enemy<span class="k3">*</span> e <span class="k3">=</span> <span class="k3">*</span>it<span class="k2">;</span>
<span class="number"> 197</span>                
<span class="number"> 198</span>                <span class="k1">if</span> <span class="k2">(</span> e-&gt;isAlive<span class="k2">(</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> e-&gt;isDying<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 199</span>                <span class="k2">{</span>
<span class="number"> 200</span>                    e-&gt;update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 201</span>                    e-&gt;draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 202</span>                    
<span class="number"> 203</span>                    <span class="k1">if</span> <span class="k2">(</span> e-&gt;isAlive<span class="k2">(</span><span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> ship-&gt;collides<span class="k2">(</span>e<span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 204</span>                    <span class="k2">{</span>
<span class="number"> 205</span>                        ship-&gt;takeDamage<span class="k2">(</span><span class="n">10</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//TODO: change to enemy attack power</span>
<span class="number"> 206</span>                        e-&gt;takeDamage<span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 207</span>                    <span class="k2">}</span>                     
<span class="number"> 208</span>                <span class="k2">}</span>
<span class="number"> 209</span>            <span class="k2">}</span>            
<span class="number"> 210</span>            
<span class="number"> 211</span>            <span class="c">//recharge weapon</span>
<span class="number"> 212</span>            ship-&gt;getCurrentWeapon<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>recharge<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 213</span>            
<span class="number"> 214</span>            <span class="c">//control game speed</span>
<span class="number"> 215</span>            GameTimer::game_ticker--<span class="k2">;</span>                                   
<span class="number"> 216</span>            
<span class="number"> 217</span>            ship-&gt;draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 218</span>        
<span class="number"> 219</span>            <a href="http://www.allegro.cc/manual/textout_ex" target="_blank"><span class="a">textout_ex</span></a><span class="k2">(</span>GameManager::buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="s">"Life: "</span>, <span class="n">10</span>, <span class="n">10</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">255</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 220</span>            <span class="c">//drawLifeBar(int x, int y, int length, height, BITMAP* bitmap); </span>
<span class="number"> 221</span>            drawLifeBar<span class="k2">(</span><span class="n">50</span>, <span class="n">0</span>, ship-&gt;getLife<span class="k2">(</span><span class="k2">)</span> , <span class="n">20</span>, GameManager::buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 222</span>            
<span class="number"> 223</span>            <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>GameManager::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">10</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>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>, <span class="s">"Current Weapon: %s"</span>, ship-&gt;getCurrentWeapon<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>getWeaponName<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>                      
<span class="number"> 224</span>            <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>GameManager::buffer, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">-</span> <span class="k2">(</span><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">8</span><span class="k2">)</span> <span class="k2">)</span>, <span class="n">10</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>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>, <span class="s">"Score: %d"</span>, GameManager::game_score<span class="k2">)</span><span class="k2">;</span>                      
<span class="number"> 225</span>            
<span class="number"> 226</span>            <a href="http://www.allegro.cc/manual/textprintf_centre_ex" target="_blank"><span class="a">textprintf_centre_ex</span></a><span class="k2">(</span>GameManager::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">176</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>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span>, <span class="s">"num=%d"</span>, GameTimer::game_ticker<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 227</span>        
<span class="number"> 228</span>            <span class="c">//blit buffer</span>
<span class="number"> 229</span>            GameManager::blitBuffer<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>                      
<span class="number"> 230</span>        <span class="k2">}</span>    
<span class="number"> 231</span>                          
<span class="number"> 232</span>    <span class="k2">}</span>
<span class="number"> 233</span>    
<span class="number"> 234</span>    unloadLevel<span class="k2">(</span>currentLevel<span class="k2">)</span><span class="k2">;</span>    
<span class="number"> 235</span><span class="k2">}</span>
<span class="number"> 236</span>
<span class="number"> 237</span><span class="k1">void</span> PlayState::update<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 238</span><span class="k2">{</span>
<span class="number"> 239</span><span class="k2">}</span>
<span class="number"> 240</span>
<span class="number"> 241</span><span class="k1">void</span> PlayState::clean<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 242</span><span class="k2">{</span>
<span class="number"> 243</span><span class="k2">}</span>                        
<span class="number"> 244</span>
<span class="number"> 245</span><span class="k1">void</span> PlayState::loadLevel<span class="k2">(</span><span class="k1">int</span> level<span class="k2">)</span>
<span class="number"> 246</span><span class="k2">{</span>     
<span class="number"> 247</span>    <a href="http://www.allegro.cc/manual/PACKFILE" target="_blank"><span class="a">PACKFILE</span></a><span class="k3">*</span> levelMap<span class="k2">;</span>
<span class="number"> 248</span>    
<span class="number"> 249</span>    <span class="k1">switch</span><span class="k2">(</span>level<span class="k2">)</span>
<span class="number"> 250</span>    <span class="k2">{</span>
<span class="number"> 251</span>        <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span>             
<span class="number"> 252</span>            SoundManager::addSample<span class="k2">(</span>METEOR_DESTROYED, <span class="s">"sfx/meteordestroyed.wav"</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number"> 253</span>             
<span class="number"> 254</span>            levelMap <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fopen" target="_blank"><span class="a">pack_fopen</span></a><span class="k2">(</span><span class="s">"levels/level_01.lvl"</span>, <span class="s">"r"</span><span class="k2">)</span><span class="k2">;</span>            
<span class="number"> 255</span>
<span class="number"> 256</span>            createLevel<span class="k2">(</span>levelMap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 257</span>
<span class="number"> 258</span>            bg <span class="k3">=</span> <span class="k1">new</span> GameBackground<span class="k2">(</span>BitmapManager::addBitmap<span class="k2">(</span>SPACE_BACKGROUND, <span class="s">"graphics/bg.bmp"</span><span class="k2">)</span>, HORIZONTAL_LEFT, <span class="n">3</span>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 259</span>
<span class="number"> 260</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 261</span>        default:
<span class="number"> 262</span>            <span class="k1">break</span><span class="k2">;</span>        
<span class="number"> 263</span>    <span class="k2">}</span>
<span class="number"> 264</span>    
<span class="number"> 265</span>    <span class="k1">if</span> <span class="k2">(</span>levelMap<span class="k2">)</span>
<span class="number"> 266</span>    <span class="k2">{</span>
<span class="number"> 267</span>        <a href="http://www.allegro.cc/manual/pack_fclose" target="_blank"><span class="a">pack_fclose</span></a><span class="k2">(</span>levelMap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 268</span>    <span class="k2">}</span>                
<span class="number"> 269</span><span class="k2">}</span>
<span class="number"> 270</span>
<span class="number"> 271</span><span class="k1">void</span> PlayState::createLevel<span class="k2">(</span><a href="http://www.allegro.cc/manual/PACKFILE" target="_blank"><span class="a">PACKFILE</span></a><span class="k3">*</span> packFile<span class="k2">)</span>
<span class="number"> 272</span><span class="k2">{</span>
<span class="number"> 273</span>    std::string <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">;</span>
<span class="number"> 274</span>    <span class="k1">char</span> buf<span class="k2">[</span><span class="n">255</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 275</span>    
<span class="number"> 276</span>    <span class="k1">int</span> currX <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 277</span>    <span class="k1">int</span> currY <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 278</span>    <span class="k1">int</span> xIncrement <span class="k3">=</span> <span class="k2">(</span><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">20</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 279</span>    <span class="k1">int</span> yIncrement <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a> <span class="k3">/</span> <span class="n">20</span><span class="k2">)</span><span class="k2">;</span>     
<span class="number"> 280</span>     
<span class="number"> 281</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>packFile<span class="k2">)</span>
<span class="number"> 282</span>    <span class="k2">{</span>
<span class="number"> 283</span>        <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 CREATE LEVEL!: %s"</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>
<span class="number"> 284</span>    <span class="k2">}</span>    
<span class="number"> 285</span>            
<span class="number"> 286</span>    <span class="k1">while</span> <span class="k2">(</span> <a href="http://www.allegro.cc/manual/pack_feof" target="_blank"><span class="a">pack_feof</span></a><span class="k2">(</span>packFile<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number"> 287</span>    <span class="k2">{</span>
<span class="number"> 288</span>        <span class="c">//read a line from the file (levelMap)</span>
<span class="number"> 289</span>        <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fgets" target="_blank"><span class="a">pack_fgets</span></a><span class="k2">(</span>buf, <span class="k1">sizeof</span><span class="k2">(</span>buf<span class="k2">)</span>, packFile<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 290</span>                
<span class="number"> 291</span>        <span class="c">//loop through each character in the line</span>
<span class="number"> 292</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> line.length<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="number"> 293</span>        <span class="k2">{</span>                           
<span class="number"> 294</span>            <span class="c">//only an empty space</span>
<span class="number"> 295</span>            <span class="k1">if</span> <span class="k2">(</span> line.at<span class="k2">(</span>i<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">' '</span><span class="k2">)</span>
<span class="number"> 296</span>            <span class="k2">{</span>
<span class="number"> 297</span>                currX <span class="k3">+</span><span class="k3">=</span> xIncrement<span class="k2">;</span>    
<span class="number"> 298</span>            <span class="k2">}</span>
<span class="number"> 299</span>            <span class="k1">else</span> <span class="c">//create an enemy object</span>
<span class="number"> 300</span>            <span class="k2">{</span>
<span class="number"> 301</span>                Enemy<span class="k3">*</span> e <span class="k3">=</span> EnemyFactory::getEnemy<span class="k2">(</span> line.at<span class="k2">(</span>i<span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 302</span>                <span class="c">//set initial position of the enemy</span>
<span class="number"> 303</span>                e-&gt;move<span class="k2">(</span>currX, currY<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 304</span>                EnemyFactory::enemyPool.push_back<span class="k2">(</span>e<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 305</span>                        
<span class="number"> 306</span>                e <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 307</span>                        
<span class="number"> 308</span>                currX <span class="k3">+</span><span class="k3">=</span> xIncrement<span class="k2">;</span>
<span class="number"> 309</span>            <span class="k2">}</span>        
<span class="number"> 310</span>        <span class="k2">}</span>
<span class="number"> 311</span>        
<span class="number"> 312</span>        currX <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 313</span>        currY <span class="k3">+</span><span class="k3">=</span> yIncrement<span class="k2">;</span>    
<span class="number"> 314</span>    <span class="k2">}</span>              
<span class="number"> 315</span><span class="k2">}</span>
<span class="number"> 316</span>
<span class="number"> 317</span><span class="k1">void</span> PlayState::unloadLevel<span class="k2">(</span><span class="k1">int</span> level<span class="k2">)</span>
<span class="number"> 318</span><span class="k2">{</span>
<span class="number"> 319</span>    <span class="k1">switch</span><span class="k2">(</span>level<span class="k2">)</span>
<span class="number"> 320</span>    <span class="k2">{</span>
<span class="number"> 321</span>        <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span>
<span class="number"> 322</span>            std::vector<span class="k3">&lt;</span>Enemy<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span><span class="k2">)</span>.swap<span class="k2">(</span>EnemyFactory::enemyPool<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 323</span>            <span class="k1">delete</span> bg<span class="k2">;</span>
<span class="number"> 324</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 325</span>        default:
<span class="number"> 326</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 327</span>    <span class="k2">}</span>    
<span class="number"> 328</span><span class="k2">}</span>
<span class="number"> 329</span>
<span class="number"> 330</span><span class="k1">void</span> PlayState::drawLifeBar<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> length, <span class="k1">int</span> height, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> bitmap<span class="k2">)</span>
<span class="number"> 331</span><span class="k2">{</span>
<span class="number"> 332</span>    <span class="c">//rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);</span>
<span class="number"> 333</span>    <span class="k1">if</span> <span class="k2">(</span>length <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 334</span>    <span class="k2">{</span>
<span class="number"> 335</span>        length <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 336</span>    <span class="k2">}</span>
<span class="number"> 337</span>    
<span class="number"> 338</span>    <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span>bitmap, x, y, <span class="k2">(</span>x <span class="k3">+</span> length<span class="k2">)</span>, height, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 339</span><span class="k2">}</span>    
<span class="number"> 340</span>
<span class="number"> 341</span>PlayState<span class="k3">*</span> PlayState::instance<span class="k2">;</span>
<span class="number"> 342</span><span class="k1">int</span> PlayState::currentLevel<span class="k2">;</span>
</div></div><p>


If you&#039;re interested on how the PlayState is loaded, here&#039;s my main cpp file.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include "globals.h"</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="c">//declare all functions used</span>
<span class="number">  4</span><span class="k1">int</span> initAllegro<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span><span class="k1">void</span> deinitAllegro<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span><span class="k3">*</span> argc, <span class="k1">char</span><span class="k3">*</span> argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span>    <span class="c">//initialize allegro</span>
<span class="number"> 10</span>    <span class="k1">if</span> <span class="k2">(</span> initAllegro<span class="k2">(</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span> <span class="k2">)</span>
<span class="number"> 11</span>    <span class="k2">{</span>        
<span class="number"> 12</span>        <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 13</span>    <span class="k2">}</span>
<span class="number"> 14</span>
<span class="number"> 15</span>    <span class="c">//push states to gameManager stack</span>
<span class="number"> 16</span>    GameStateManager::pushState<span class="k2">(</span> PlayState::getInstance<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>    
<span class="number"> 18</span>    
<span class="number"> 19</span>    <span class="c">//loop through gameManager stack</span>
<span class="number"> 20</span>        GameStateManager::getCurrentState<span class="k2">(</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>run<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="c">//--execute run method</span>
<span class="number"> 21</span>        GameStateManager::popState<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//--pop the element on top</span>
<span class="number"> 22</span>    
<span class="number"> 23</span>                    
<span class="number"> 24</span>    <span class="c">//deinitialize allegro</span>
<span class="number"> 25</span>    deinitAllegro<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>    
<span class="number"> 27</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 28</span><span class="k2">}</span>
<span class="number"> 29</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>
<span class="number"> 30</span>
<span class="number"> 31</span><span class="k1">int</span> initAllegro<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 32</span><span class="k2">{</span>
<span class="number"> 33</span>    <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>
<span class="number"> 34</span>    <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>
<span class="number"> 35</span>   
<span class="number"> 36</span>    <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>
<span class="number"> 37</span>
<span class="number"> 38</span>    <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span>GameManager::COLOR_DEPTH<span class="k2">)</span><span class="k2">;</span>    
<span class="number"> 39</span>
<span class="number"> 40</span>    <span class="k1">if</span> <span class="k2">(</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, GameManager::GAME_WIDTH, GameManager::GAME_HEIGHT, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span> <span class="k2">)</span>
<span class="number"> 41</span>    <span class="k2">{</span>
<span class="number"> 42</span>        <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">"Graphics Mode Could Not Be Set!: %s"</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>
<span class="number"> 43</span>        <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 44</span>    <span class="k2">}</span>
<span class="number"> 45</span>    
<span class="number"> 46</span>    <span class="k1">if</span> <span class="k2">(</span> <a href="http://www.allegro.cc/manual/install_sound" target="_blank"><span class="a">install_sound</span></a><span class="k2">(</span>DIGI_AUTODETECT, MIDI_AUTODETECT, <span class="n">0</span><span class="k2">)</span> <span class="k2">)</span>
<span class="number"> 47</span>    <span class="k2">{</span>
<span class="number"> 48</span>        <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">"Sound Error: %s"</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>
<span class="number"> 49</span>    <span class="k2">}</span>    
<span class="number"> 50</span>    
<span class="number"> 51</span>    <a href="http://www.allegro.cc/manual/set_volume" target="_blank"><span class="a">set_volume</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span>
<span class="number"> 53</span>    <a href="http://www.allegro.cc/manual/LOCK_VARIABLE" target="_blank"><span class="a">LOCK_VARIABLE</span></a><span class="k2">(</span>GameTimer::game_ticker<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 54</span>    <a href="http://www.allegro.cc/manual/LOCK_FUNCTION" target="_blank"><span class="a">LOCK_FUNCTION</span></a><span class="k2">(</span>GameTimer::incrementGameTicker<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>    
<span class="number"> 56</span>    <a href="http://www.allegro.cc/manual/install_int" target="_blank"><span class="a">install_int</span></a><span class="k2">(</span>GameTimer::incrementGameTicker, <span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>        
<span class="number"> 58</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 59</span><span class="k2">}</span>
<span class="number"> 60</span>
<span class="number"> 61</span><span class="k1">void</span> deinitAllegro<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 62</span><span class="k2">{</span>    
<span class="number"> 63</span>    <a href="http://www.allegro.cc/manual/allegro_exit" target="_blank"><span class="a">allegro_exit</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 64</span><span class="k2">}</span>
</div></div><p>


Here are the constants that I used for the game width, height and color depth.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include "globals.h"</span>
<span class="number">  2</span>
<span class="number">  3</span>GameManager::GameManager<span class="k2">(</span><span class="k2">)</span>
<span class="number">  4</span><span class="k2">{</span>
<span class="number">  5</span><span class="k2">}</span>
<span class="number">  6</span>
<span class="number">  7</span>GameManager::~GameManager<span class="k2">(</span><span class="k2">)</span>
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span><span class="k2">}</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="k1">void</span> GameManager::blitBuffer<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 12</span><span class="k2">{</span>
<span class="number"> 13</span>    <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    
<span class="number"> 15</span>    <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>buffer, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, GAME_WIDTH, GAME_HEIGHT<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    
<span class="number"> 17</span>    <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    
<span class="number"> 19</span>    <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>
<span class="number"> 20</span><span class="k2">}</span> 
<span class="number"> 21</span>
<span class="number"> 22</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> GameManager::buffer<span class="k2">;</span>
<span class="number"> 23</span>
<span class="number"> 24</span><span class="k1">const</span> <span class="k1">short</span> <span class="k1">int</span> GameManager::GAME_WIDTH <span class="k3">=</span> <span class="n">640</span><span class="k2">;</span>
<span class="number"> 25</span><span class="k1">const</span> <span class="k1">short</span> <span class="k1">int</span> GameManager::GAME_HEIGHT <span class="k3">=</span> <span class="n">480</span><span class="k2">;</span>
<span class="number"> 26</span><span class="k1">const</span> <span class="k1">short</span> <span class="k1">int</span> GameManager::COLOR_DEPTH <span class="k3">=</span> <span class="n">16</span><span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span><span class="k1">int</span> GameManager::game_score<span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (armond)</author>
		<pubDate>Wed, 21 Feb 2007 12:32:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
//move all projectiles<br />for (std::vector&lt;Projectile*&gt;::iterator it = ProjectileFactory::projectilePool.begin(); it != ProjectileFactory::projectilePool.end(); ++it)<br />[...]<br />      //check for collision on bullet and enemies<br />      for(std::vector&lt;Enemy*&gt;::iterator eit = EnemyFactory::enemyPool.begin(); eit != EnemyFactory::enemyPool.end(); ++eit)
</p></div></div><p>
Howmany enemies and projectyles do you have? If checking each projectyle against each enemy, the execution-time can grow very fast according to howmany of each there are.</p><p>AE.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Andrei Ellman)</author>
		<pubDate>Wed, 21 Feb 2007 14:36:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I agree with Andrei here.<br />Although game logic is usually the least of your problems, in this case you might want to optimize.<br />There are numerous optimization techniques you can use here, and virtually all of them try to reduce the number of iterations (read: try to loop through less objects). This is better than optimizing the collision test itself (rule of thumb: optimize algorithms, not code).<br />The key to this common problem is space partitioning, which means that you divide the total space in which objects can lie into regions, and you only test objects against each other that share a region. The art is to define your regions in such a way that they are easy and fast to calculate, and that they don&#39;t produce double checking. Here are a few approaches:<br />1. Axis sort. Sort all your objects by one of the cardinal axes (x or y). Check in both directions, and stop iterating when you hit an object that is too far away. This will usually restrict checking to the nearest 10 or so objects.<br />2. Tilemap. Divide your scene into a tile grid (you don&#39;t need to use this for drawing, but if you draw using a tilemap anyway, you may want to add the collision detection features to it while you&#39;re at it), and give each tile a list (a vector is probably your best choice, or maybe even a static array - just be careful not to produce overflows) with pointers to all checkable objects that touch it. If your tile size is a power of 2, then finding the tile a character is on is as trivial as a binary &amp; with tilesize-1. Downside: enormous memory consumption, and you need to be careful with those character lists. Upside: you only check against 4 tiles max (provided your character isn&#39;t larger than the tile size).<br />3. Quadtrees. Google for it. The idea is that you divide your space into 4 sectors, and divide those 4 again, and so on, until a given minimum size is reached, OR a maximum number of characters is found in the sector. When checking for collisions, you only check against objects that share a sector with the current object. This is the hardest to code, but it is the most efficient one for complex scenes, with very little overhead and adaptable to the most uneven distributions of objects (e.g. a hundred objects crowding in one corner of the screen).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Wed, 21 Feb 2007 15:03:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi! I just tried doing </p><p>install_int_ex(GameTimer::incrementGameTicker, BPS_TO_TIMER(100) );</p><p>doesn&#39;t make any change...</p><p>I haven&#39;t tried Tobias Dammers&#39;s suggestion yet. But even when I don&#39;t fire any bullet(no instance created) and there is only 1 enemy it&#39;s still slow... Slow as in not as fast when I&#39;m in a P-IV Machine... When I remove the scrolling background, it does get a little fast. But still not that fast... Here is the code for my scrolling bg BTW... I&#39;d like to point out that this(the scrolling bg) isn&#39;t necessarily my problem.</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="p">#include "globals.h"</span></td></tr><tr><td class="number">2</td><td>&#160;</td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td>GameBackground::GameBackground<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> bitmap, BackgroundScrollType scrollType, <span class="k1">int</span> scrollSpeed, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span></td></tr><tr><td class="number">5</td><td><span class="k2">{</span></td></tr><tr><td class="number">6</td><td>    this-&gt;bitmap <span class="k3">=</span> bitmap<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    this-&gt;scrollType <span class="k3">=</span> scrollType<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    this-&gt;scrollSpeed <span class="k3">=</span> scrollSpeed<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    this-&gt;x <span class="k3">=</span> x<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>    this-&gt;y <span class="k3">=</span> y<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    </td></tr><tr><td class="number">12</td><td>    tmpBuffer <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><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><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>&#160;</td></tr><tr><td class="number">15</td><td>GameBackground::~GameBackground<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">16</td><td><span class="k2">{</span></td></tr><tr><td class="number">17</td><td>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>tmpBuffer<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td><span class="k2">}</span></td></tr><tr><td class="number">19</td><td>&#160;</td></tr><tr><td class="number">20</td><td><span class="k1">void</span> GameBackground::update<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">21</td><td><span class="k2">{</span></td></tr><tr><td class="number">22</td><td>    scrollBackground<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td><span class="k2">}</span></td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td><span class="k1">void</span> GameBackground::scrollBackground<span class="k2">(</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>    <span class="k1">switch</span><span class="k2">(</span>scrollType<span class="k2">)</span></td></tr><tr><td class="number">28</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">29</td><td>        <span class="k1">case</span> HORIZONTAL_LEFT:</td></tr><tr><td class="number">30</td><td>            scrollLeft<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>            <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>        default:</td></tr><tr><td class="number">33</td><td>            <span class="k1">break</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>    <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>&#160;</td></tr><tr><td class="number">37</td><td><span class="k1">void</span> GameBackground::draw<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">38</td><td><span class="k2">{</span></td></tr><tr><td class="number">39</td><td>    <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>GameManager::buffer, tmpBuffer, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td><span class="k2">}</span>    </td></tr><tr><td class="number">41</td><td>&#160;</td></tr><tr><td class="number">42</td><td><span class="k1">void</span> GameBackground::setScrollSpeed<span class="k2">(</span><span class="k1">int</span> speed<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>    scrollSpeed <span class="k3">=</span> speed<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>&#160;</td></tr><tr><td class="number">47</td><td><span class="k1">void</span> GameBackground::scrollLeft<span class="k2">(</span><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>    x <span class="k3">-</span><span class="k3">=</span> scrollSpeed<span class="k2">;</span></td></tr><tr><td class="number">50</td><td>    </td></tr><tr><td class="number">51</td><td>    <span class="k1">int</span> bw <span class="k3">=</span> bitmap-&gt;w<span class="k2">;</span></td></tr><tr><td class="number">52</td><td>    <span class="k1">int</span> bh <span class="k3">=</span> bitmap-&gt;h<span class="k2">;</span></td></tr><tr><td class="number">53</td><td>    </td></tr><tr><td class="number">54</td><td>    <span class="k1">int</span> xOffSet <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a> <span class="k3">+</span> bw<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td>    </td></tr><tr><td class="number">56</td><td>    <span class="k1">if</span> <span class="k2">(</span> x <span class="k3">&gt;</span> bw <span class="k3">|</span><span class="k3">|</span> x <span class="k3">&lt;</span> <span class="k3">-</span><span class="k2">(</span>bw<span class="k2">)</span> <span class="k2">)</span></td></tr><tr><td class="number">57</td><td>    <span class="k2">{</span> </td></tr><tr><td class="number">58</td><td>        x <span class="k3">=</span> <span class="n">0</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>    </td></tr><tr><td class="number">61</td><td>    <span class="k1">int</span> newX <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td>    </td></tr><tr><td class="number">63</td><td>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="k3">-</span><span class="k2">(</span>bw<span class="k2">)</span><span class="k2">;</span> i <span class="k3">&lt;</span> <span class="k2">(</span>xOffSet<span class="k2">)</span><span class="k2">;</span> i <span class="k3">+</span><span class="k3">=</span> bw<span class="k2">)</span></td></tr><tr><td class="number">64</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">65</td><td>        newX <span class="k3">=</span> <span class="k2">(</span>x <span class="k3">+</span> i<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">66</td><td>        </td></tr><tr><td class="number">67</td><td>        <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> j <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> j <span class="k3">&lt;</span> <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">;</span> j <span class="k3">+</span><span class="k3">=</span> bh<span class="k2">)</span></td></tr><tr><td class="number">68</td><td>        <span class="k2">{</span></td></tr><tr><td class="number">69</td><td>            <span class="c">//draw tile</span></td></tr><tr><td class="number">70</td><td>            <span class="c">//Optimization: draw only parts that are visible to the screen            </span></td></tr><tr><td class="number">71</td><td>            <span class="k1">if</span> <span class="k2">(</span> <span class="k2">(</span> newX <span class="k3">+</span> bw<span class="k2">)</span> <span class="k3">&gt;</span> <span class="n">0</span> <span class="k2">)</span></td></tr><tr><td class="number">72</td><td>            <span class="k2">{</span></td></tr><tr><td class="number">73</td><td>                <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span>tmpBuffer, bitmap, newX, j<span class="k2">)</span><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>            <span class="k1">else</span></td></tr><tr><td class="number">76</td><td>            <span class="k2">{</span></td></tr><tr><td class="number">77</td><td>                <span class="k1">break</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>                    </td></tr><tr><td class="number">80</td><td>        <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><span class="k2">}</span></td></tr></tbody></table></div></div><p>

I&#39;m scrolling an 200x200 24-bit bitmap and drawing it repeatedly on screen to create an illusion of a scrolling background.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (armond)</author>
		<pubDate>Thu, 22 Feb 2007 17:44:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>24 bit bitmap? But your screen is 16bit... try to avoid run-time color conversion.</p><p>If the animation is still choppy, the background drawing is not at fault and no optimization there will solve the problem.<br />I guess the final blit to screen takes the biggest toll, but you can&#39;t easily reduce this cost (dirty rectangles on a 840x680 hardware scrolling bitmap? Seems far-fetched)</p><p>Last step: profile, using your compiler&#39;s options.</p><p>edit: I just noticed you used draw_sprite() both times: If what you&#39;re copying is opaque, just blit() it, it will be quite faster.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Thu, 22 Feb 2007 18:33:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
On low end machines drawing a 24 bit bitmap to the screen every frame is just slow at high resolutions. There is not much you can do if you have scrolling on such a machine. Looking into Video bitmaps might be your best bet..
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Thu, 22 Feb 2007 18:35:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you for your reply! Could you please explain what you meant by &quot;Looking into Video bitmaps might be your best bet..&quot;?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (armond)</author>
		<pubDate>Thu, 22 Feb 2007 19:16:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
Copying data from video bitmaps to the screen can be much faster that copying from a normal BITMAP if your card supports hardware acceleration. There is a section in the manual on it and many threads if you do a search on these forums. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Thu, 22 Feb 2007 19:23:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi! I quick search from google tells me that you&#39;re talking about page flipping...?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (armond)</author>
		<pubDate>Sun, 25 Feb 2007 12:29:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
That&#39;s related, look in the manual in the gfx / bitmap sections.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Richard Phipps)</author>
		<pubDate>Sun, 25 Feb 2007 17:06:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Armond, your noob code doesn&#39;t <i>look</i> like noob code.  I&#39;m not complaining, it&#39;s a nice change....   <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (nonnus29)</author>
		<pubDate>Mon, 26 Feb 2007 09:05:12 +0000</pubDate>
	</item>
</rss>
