<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Programm lagging</title>
		<link>http://www.allegro.cc/forums/view/613042</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 31 Jul 2013 15:15:30 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>When I create about 70 objects on my screen wich are made of rendering and coliding , my &quot;game&quot; starts lagging a bit , but if I push further and create around 128 objects, my game freezes  , or only screen does , because in console everything I chechk is working perfectly fine. Is it possible that its lagging because of allegro , or I am just making too much objects on screen and doing too much stuff with them?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kebapmanager)</author>
		<pubDate>Mon, 29 Jul 2013 03:31:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What version of allegro?<br />What are your specs?<br />OS?<br />DirectX or OpenGL?<br />Are you printing a lot to the console?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (l j)</author>
		<pubDate>Mon, 29 Jul 2013 03:40:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>IN addition to what taron asked, without seeing your code, it&#39;s very difficult to tell you what&#39;s causing the lag.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Mon, 29 Jul 2013 04:33:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>allegro version 5.0.9<br />My specs: Intel Core i3 -540 3.07GHz<br />          4,99GB RAM<br />          ATI Radeon HD 4800 ( 2GB graphics memory)</p><p>64bit Windows 7 ultimate<br />directX or OpenGL , huh none? I only use allegro XD I dont understand :S<br />I print velY and state changing to my console , just to see if player is working and he is , but nothing is happeninig on the sreen , so screen is forzen but game still working ( maybe since I cant test properly , or better then console)</p><p>Since I didint even understand directX and openGL question , maybe thats the problem :S since I dont even know how to make my project use one ?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kebapmanager)</author>
		<pubDate>Mon, 29 Jul 2013 14:12:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are you calling <span class="source-code"><a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span></span>?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Mon, 29 Jul 2013 14:50:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes ofc I am calling flip display :S , maybe code from main could help you guys out?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kebapmanager)</author>
		<pubDate>Mon, 29 Jul 2013 16:03:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, please show your display code. And the DirectX / OpenGL question applies to what Allegro is using behind the scenes. Default on Windows is DirectX. Don&#39;t worry about it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 29 Jul 2013 19:43:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So this is the render code ( I am using list as you can see)	<br />                if(render &amp;&amp; al_is_event_queue_empty(event_queue))<br />		{<br />			render = false;</p><p>			//BEGIN PROJECT RENDER================<br />			for(iter = objects.begin(); iter != objects.end(); ++iter)<br />				(*iter)-&gt;Render();</p><p>			//FLIP BUFFERS========================<br />			al_flip_display();<br />			al_clear_to_color(al_map_rgb(255, 255, 255));<br />		}</p><p>Render in player class:</p><p>        int fx = curFrame * frameWidth;<br />	int fy = animationColumns * frameHeight;</p><p>	al_convert_mask_to_alpha(image, al_map_rgb(255,255, 255));						<br />	al_draw_scaled_bitmap(image, fx, fy, frameWidth, frameHeight, x, y, 16, 19, 0);</p><p>Render of a Cube ( 128 objects I create):</p><p>	al_draw_scaled_bitmap(image, 0, 0, 24, 24, x, y, 24, 24, 0);<br />As far as I understand its probably not problem in rendering, but in soo much objects created , maybe 128 objects is too much for PC even thought I dont uunderstand how can I run 3D games then wich seem khm , far more complex.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kebapmanager)</author>
		<pubDate>Mon, 29 Jul 2013 20:14:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>128 objects is not that much when using hardware acceleration, trust me, your objects aren&#39;t even that complex. It&#39;s far more likely a bug in your code somewhere.</p><p>Dereferencing a list iterator and an object pointer will take some time, but should not be noticeable yet. If all else fails use a vector instead, especially if the number of objects doesn&#39;t change often or you have a fixed limit to the number of them.</p><p>One thing is that you should only be calling al_convert_mask_to_alpha once when you load your objects. After that, all the color you specify (white, in your case) will be cleared to zero alpha.</p><p>So, you have checked your x and y values? And they are on screen? Everything else you showed looks okay I believe.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 29 Jul 2013 20:23:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I know my objects are not complex I mean its only drawing them , thats why this is soo weird to me. </p><p>Dereferecing iterators Il try that till tomorow since I have no clue what that does, or how to do that , Il look up on internet about that or something.</p><p>I am calling mask to alpha only once now ( when I create images tnx for the tip )</p><p>and by chechking x and y values if you mean about player ones , yes they are working fine , its like screen gets forzen at moment I make over 180 objects , and in console whatever I set to cout seems to work , but with delay , and delay of couting gets bigger and bigger , like I move play or tell him to jimp his Y updates like 7 seconds after I clicked , and further I let my program to work delay is longer , even for exiting I must wait over 10 sec.</p><p>So it seems like screen is completly forezn , nothing keeps rendering ,but code is still working , with lagg /delay.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kebapmanager)</author>
		<pubDate>Mon, 29 Jul 2013 20:44:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, I&#39;m gonna guess it&#39;s in your event loop. Delays like that usually have something to do with not processing events in a timely manner. Post main, or whatever holds your game / event loop.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 29 Jul 2013 20:53:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here is my hole main.
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;allegro5/allegro_primitives.h&gt;</span>
<span class="number">   5</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number">   6</span><span class="p">#include &lt;allegro5/allegro_ttf.h&gt;</span>
<span class="number">   7</span><span class="p">#include &lt;allegro5/allegro_audio.h&gt;</span>
<span class="number">   8</span><span class="p">#include &lt;allegro5/allegro_acodec.h&gt;</span>
<span class="number">   9</span><span class="p">#include &lt;list&gt;</span>
<span class="number">  10</span><span class="p">#include &lt;math.h&gt;</span>
<span class="number">  11</span>
<span class="number">  12</span><span class="p">#include "GameObject.h"</span>
<span class="number">  13</span><span class="p">#include "Player.h"</span>
<span class="number">  14</span><span class="p">#include "Cube.h"</span>
<span class="number">  15</span><span class="p">#include "Globals.h"</span>
<span class="number">  16</span>
<span class="number">  17</span><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span>
<span class="number">  18</span>
<span class="number">  19</span><span class="c">//GLOBALS==========================================================================</span>
<span class="number">  20</span>Player <span class="k3">*</span>player<span class="k2">;</span>
<span class="number">  21</span>std::list<span class="k3">&lt;</span>GameObject <span class="k3">*</span><span class="k3">&gt;</span> objects<span class="k2">;</span>
<span class="number">  22</span>std::list<span class="k3">&lt;</span>GameObject <span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator iter<span class="k2">;</span>
<span class="number">  23</span>std::list<span class="k3">&lt;</span>GameObject <span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator iter2<span class="k2">;</span>
<span class="number">  24</span>
<span class="number">  25</span><span class="k1">bool</span> keys<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span><span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span>, <span class="k1">false</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  26</span><span class="k1">enum</span> KEYS<span class="k2">{</span>UP, DOWN, LEFT, RIGHT, SPACE<span class="k2">}</span><span class="k2">;</span>
<span class="number">  27</span>
<span class="number">  28</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span>
<span class="number">  29</span><span class="c">//SHELL VARIABLESs=======================================================================</span>
<span class="number">  30</span><span class="k2">{</span>
<span class="number">  31</span>  <span class="k1">bool</span> done <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  32</span>  <span class="k1">bool</span> render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  33</span>
<span class="number">  34</span>  <span class="k1">int</span> xX<span class="k2">;</span>
<span class="number">  35</span>  <span class="k1">int</span> xY<span class="k2">;</span>
<span class="number">  36</span>
<span class="number">  37</span>  player <span class="k3">=</span> <span class="k1">new</span> Player<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>  
<span class="number">  38</span>
<span class="number">  39</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>playerImage <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  40</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>cubeImage <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  41</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  42</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a> <span class="k3">*</span>event_queue <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  43</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a> <span class="k3">*</span>timer<span class="k2">;</span>
<span class="number">  44</span><span class="c">//ALLEGRO INIT==============================================================</span>
<span class="number">  45</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>                    <span class="c">//Initialize Allegro</span>
<span class="number">  46</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  47</span>
<span class="number">  48</span>  display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>WIDTH, HEIGHT<span class="k2">)</span><span class="k2">;</span>      <span class="c">//Create our display object</span>
<span class="number">  49</span>
<span class="number">  50</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span>                    <span class="c">//Test display object</span>
<span class="number">  51</span>    <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  52</span><span class="c">//ADDON INSTALL========================================================</span>
<span class="number">  53</span>  <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>  <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>  <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span>  <a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>  <a href="http://www.allegro.cc/manual/al_install_mouse"><span class="a">al_install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>  <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  59</span>
<span class="number">  60</span><span class="c">//PROJECT INIT================================</span>
<span class="number">  61</span>  playerImage <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"Starseed Pilgrim.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  62</span>  player-&gt;Init<span class="k2">(</span>playerImage<span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>  <a href="http://www.allegro.cc/manual/al_convert_mask_to_alpha"><span class="a">al_convert_mask_to_alpha</span></a><span class="k2">(</span>playerImage, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>  
<span class="number">  64</span>
<span class="number">  65</span>  objects.push_back<span class="k2">(</span>player<span class="k2">)</span><span class="k2">;</span>
<span class="number">  66</span>
<span class="number">  67</span>  cubeImage <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"Blocks.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>
<span class="number">  69</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_739.html" target="_blank">srand</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_821.html" target="_blank">time</a><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span><span class="c">//TIMER INIT AND STARTUP======================</span>
<span class="number">  71</span>
<span class="number">  72</span>  event_queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>  timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">60</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>
<span class="number">  75</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  76</span>  <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>event_queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  77</span>
<span class="number">  78</span>  <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  79</span><span class="c">//GAME LOOP=========================================================</span>
<span class="number">  80</span>  <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span>
<span class="number">  81</span>  <span class="k2">{</span>
<span class="number">  82</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> ev<span class="k2">;</span>
<span class="number">  83</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_MOUSE_STATE"><span class="a">ALLEGRO_MOUSE_STATE</span></a> mouse<span class="k2">;</span>
<span class="number">  84</span>    <a href="http://www.allegro.cc/manual/al_get_mouse_state"><span class="a">al_get_mouse_state</span></a> <span class="k2">(</span><span class="k3">&amp;</span>mouse<span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>    <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>event_queue, <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>    xX <span class="k3">=</span> mouse.x<span class="k2">;</span>
<span class="number">  87</span>    xY <span class="k3">=</span> mouse.y<span class="k2">;</span>
<span class="number">  88</span>
<span class="number">  89</span><span class="c">//INPUT==========================================================================</span>
<span class="number">  90</span>    <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number">  91</span>    <span class="k2">{</span>
<span class="number">  92</span>      <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number">  93</span>      <span class="k2">{</span>
<span class="number">  94</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number">  95</span>        done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  96</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  97</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number">  98</span>        keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  99</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 100</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 101</span>        keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 102</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 103</span>      <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 104</span>        keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 105</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 106</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 107</span>        keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 108</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 109</span>      <span class="k1">case</span> ALLEGRO_KEY_SPACE:
<span class="number"> 110</span>        keys<span class="k2">[</span>SPACE<span class="k2">]</span> <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 111</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> <span class="n">4</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 112</span>        <span class="k2">{</span>
<span class="number"> 113</span>          <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> <span class="n">4</span><span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 114</span>          <span class="k2">{</span>
<span class="number"> 115</span>            Cube <span class="k3">*</span>cube <span class="k3">=</span> <span class="k1">new</span> Cube<span class="k2">(</span>xX, xY, cubeImage<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>            objects.push_back<span class="k2">(</span>cube<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 117</span>            xX <span class="k3">+</span><span class="k3">=</span><span class="n">24</span><span class="k2">;</span>
<span class="number"> 118</span>          <span class="k2">}</span>
<span class="number"> 119</span>          xX <span class="k3">=</span>mouse.x<span class="k2">;</span>
<span class="number"> 120</span>          xY <span class="k3">+</span><span class="k3">=</span><span class="n">24</span><span class="k2">;</span>
<span class="number"> 121</span>        <span class="k2">}</span>      
<span class="number"> 122</span>      <span class="k2">}</span>
<span class="number"> 123</span>    <span class="k2">}</span>
<span class="number"> 124</span>    <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP<span class="k2">)</span>
<span class="number"> 125</span>    <span class="k2">{</span>
<span class="number"> 126</span>      <span class="k1">switch</span><span class="k2">(</span>ev.keyboard.keycode<span class="k2">)</span>
<span class="number"> 127</span>      <span class="k2">{</span>
<span class="number"> 128</span>      <span class="k1">case</span> ALLEGRO_KEY_ESCAPE:
<span class="number"> 129</span>        done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 130</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 131</span>      <span class="k1">case</span> ALLEGRO_KEY_LEFT:
<span class="number"> 132</span>        keys<span class="k2">[</span>LEFT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 133</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 134</span>      <span class="k1">case</span> ALLEGRO_KEY_RIGHT:
<span class="number"> 135</span>        keys<span class="k2">[</span>RIGHT<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 136</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 137</span>      <span class="k1">case</span> ALLEGRO_KEY_UP:
<span class="number"> 138</span>        keys<span class="k2">[</span>UP<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 139</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 140</span>      <span class="k1">case</span> ALLEGRO_KEY_DOWN:
<span class="number"> 141</span>        keys<span class="k2">[</span>DOWN<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 142</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 143</span>      <span class="k1">case</span> ALLEGRO_KEY_SPACE:
<span class="number"> 144</span>        keys<span class="k2">[</span>SPACE<span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 145</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 146</span>      <span class="k2">}</span>
<span class="number"> 147</span>    <span class="k2">}</span>
<span class="number"> 148</span><span class="c">//GAME UPDATE========================================================</span>
<span class="number"> 149</span>    <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 150</span>    <span class="k2">{</span>
<span class="number"> 151</span>      render <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 152</span>
<span class="number"> 153</span>      <span class="k1">if</span><span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span>
<span class="number"> 154</span>      <span class="k2">{</span>
<span class="number"> 155</span>        done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 156</span>      <span class="k2">}</span>
<span class="number"> 157</span>
<span class="number"> 158</span>      <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>LEFT<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 159</span>        player-&gt;MoveLeft<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 160</span>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>RIGHT<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 161</span>        player-&gt;MoveRight<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 162</span>      <span class="k1">else</span>
<span class="number"> 163</span>        player-&gt;ResetAnimation<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 164</span>
<span class="number"> 165</span>      <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>UP<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 166</span>        player-&gt;MoveUp<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 167</span>      <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>keys<span class="k2">[</span>DOWN<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 168</span>        player-&gt;MoveDown<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 169</span>      <span class="k1">else</span>
<span class="number"> 170</span>        player-&gt;ResetAnimation<span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 171</span>
<span class="number"> 172</span>      <span class="c">//update</span>
<span class="number"> 173</span>      <span class="k1">for</span><span class="k2">(</span>iter <span class="k3">=</span> objects.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> iter <span class="k3">!</span><span class="k3">=</span> objects.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>iter<span class="k2">)</span>
<span class="number"> 174</span>        <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 175</span>
<span class="number"> 176</span>      <span class="c">//collisions</span>
<span class="number"> 177</span>      <span class="k1">for</span><span class="k2">(</span>iter <span class="k3">=</span> objects.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> iter <span class="k3">!</span><span class="k3">=</span> objects.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>iter<span class="k2">)</span>
<span class="number"> 178</span>      <span class="k2">{</span>
<span class="number"> 179</span>        <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span> <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Collidable<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span> <span class="k1">continue</span><span class="k2">;</span>
<span class="number"> 180</span>
<span class="number"> 181</span>        <span class="k1">for</span><span class="k2">(</span>iter2 <span class="k3">=</span> iter<span class="k2">;</span> iter2 <span class="k3">!</span><span class="k3">=</span> objects.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>iter2<span class="k2">)</span>
<span class="number"> 182</span>        <span class="k2">{</span>
<span class="number"> 183</span>          <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span><span class="k2">(</span><span class="k3">*</span>iter2<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Collidable<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span> <span class="k1">continue</span><span class="k2">;</span>
<span class="number"> 184</span>    
<span class="number"> 185</span>          <span class="k1">if</span><span class="k2">(</span> <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>CheckCollisions<span class="k2">(</span> <span class="k2">(</span><span class="k3">*</span>iter2<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 186</span>          <span class="k2">{</span>
<span class="number"> 187</span>            <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Collided<span class="k2">(</span> <span class="k2">(</span><span class="k3">*</span>iter2<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>GetID<span class="k2">(</span><span class="k2">)</span>, <span class="k2">(</span><span class="k3">*</span>iter2<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 188</span>            <span class="k2">(</span><span class="k3">*</span>iter2<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Collided<span class="k2">(</span> <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>GetID<span class="k2">(</span><span class="k2">)</span>, <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 189</span>          <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="c">//cull the dead</span>
<span class="number"> 193</span>      <span class="k1">for</span><span class="k2">(</span>iter <span class="k3">=</span> objects.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> iter <span class="k3">!</span><span class="k3">=</span> objects.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">)</span>
<span class="number"> 194</span>      <span class="k2">{</span>
<span class="number"> 195</span>        <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span> <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>GetAlive<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 196</span>        <span class="k2">{</span>
<span class="number"> 197</span>          <span class="k1">delete</span> <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k2">;</span>                <span class="c">// he is destroying only specific memory , not the bitmap ( object) itself ,because there is possiblity that there is more objects of same type , using same bitmap in the game.googl about this and learn more you lazy nab !</span>
<span class="number"> 198</span>          iter <span class="k3">=</span> objects.erase<span class="k2">(</span>iter<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 199</span>        <span class="k2">}</span>
<span class="number"> 200</span>        <span class="k1">else</span>
<span class="number"> 201</span>          iter<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 202</span>      <span class="k2">}</span>
<span class="number"> 203</span>
<span class="number"> 204</span>    <span class="k2">}</span>
<span class="number"> 205</span><span class="c">//RENDER======================================================================</span>
<span class="number"> 206</span>    <span class="k1">if</span><span class="k2">(</span>render <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 207</span>    <span class="k2">{</span>
<span class="number"> 208</span>      render <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 209</span>
<span class="number"> 210</span>      <span class="c">//BEGIN PROJECT RENDER================</span>
<span class="number"> 211</span>      <span class="k1">for</span><span class="k2">(</span>iter <span class="k3">=</span> objects.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> iter <span class="k3">!</span><span class="k3">=</span> objects.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>iter<span class="k2">)</span>
<span class="number"> 212</span>        <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Render<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">//FLIP BUFFERS========================</span>
<span class="number"> 215</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 216</span>      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">0</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 217</span>    <span class="k2">}</span>
<span class="number"> 218</span>  <span class="k2">}</span>
<span class="number"> 219</span><span class="c">//DESTROY PROJECT OBJECTS=================================================</span>
<span class="number"> 220</span>  <span class="k1">for</span><span class="k2">(</span>iter <span class="k3">=</span> objects.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> iter <span class="k3">!</span><span class="k3">=</span> objects.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">)</span>
<span class="number"> 221</span>  <span class="k2">{</span>
<span class="number"> 222</span>    <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Destroy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number"> 223</span>    <span class="k1">delete</span> <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 224</span>    iter <span class="k3">=</span> objects.erase<span class="k2">(</span>iter<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 225</span>  <span class="k2">}</span>
<span class="number"> 226</span>
<span class="number"> 227</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>playerImage<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 228</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>cubeImage<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>
<span class="number"> 230</span>  <span class="c">//SHELL OBJECTS=================================</span>
<span class="number"> 231</span>  <a href="http://www.allegro.cc/manual/al_destroy_timer"><span class="a">al_destroy_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 232</span>  <a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 233</span>  <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 234</span>
<span class="number"> 235</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 236</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kebapmanager)</author>
		<pubDate>Mon, 29 Jul 2013 21:36:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, the problem may be in your collision detection routine. Your event loop looks okay as far as I can see. If you have n blocks, you are calling CheckCollisions (n*(n-1))/2 times, which is (n^2 - n)/2 which is O(n^2) time. So at 180 objects, that is 16110 calls per frame and 96,660 calls per second. And that&#39;s not to mention each time you dereference an iterator and then dereference a pointer. The second bit can&#39;t be helped, but the first part can.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
</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="c">//collisions</span>
<span class="number">  2</span>      <span class="k1">for</span><span class="k2">(</span>iter <span class="k3">=</span> objects.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> iter <span class="k3">!</span><span class="k3">=</span> objects.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>iter<span class="k2">)</span>
<span class="number">  3</span>      <span class="k2">{</span>
<span class="number">  4</span>        <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span> <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Collidable<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span> <span class="k1">continue</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>        <span class="k1">for</span><span class="k2">(</span>iter2 <span class="k3">=</span> iter<span class="k2">;</span> iter2 <span class="k3">!</span><span class="k3">=</span> objects.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>iter2<span class="k2">)</span>
<span class="number">  7</span>        <span class="k2">{</span>
<span class="number">  8</span>          <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span><span class="k2">(</span><span class="k3">*</span>iter2<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Collidable<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span> <span class="k1">continue</span><span class="k2">;</span>
<span class="number">  9</span>    
<span class="number"> 10</span>          <span class="k1">if</span><span class="k2">(</span> <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>CheckCollisions<span class="k2">(</span> <span class="k2">(</span><span class="k3">*</span>iter2<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 11</span>          <span class="k2">{</span>
<span class="number"> 12</span>            <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Collided<span class="k2">(</span> <span class="k2">(</span><span class="k3">*</span>iter2<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>GetID<span class="k2">(</span><span class="k2">)</span>, <span class="k2">(</span><span class="k3">*</span>iter2<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>            <span class="k2">(</span><span class="k3">*</span>iter2<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Collided<span class="k2">(</span> <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>GetID<span class="k2">(</span><span class="k2">)</span>, <span class="k2">(</span><span class="k3">*</span>iter<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>          <span class="k2">}</span>
<span class="number"> 15</span>        <span class="k2">}</span>
<span class="number"> 16</span>      <span class="k2">}</span>
</div></div><p>
</p></div></div><p>

If I was you, I would go ahead and switch to using a std::vector (See the <a href="http://www.sgi.com/tech/stl/">SGI STL guide</a>). There is also a problem with your algorithm. iter2 should start at iter + 1, not iter. Second, extract the pointers first.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> sz <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>objects.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</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> sz <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
   Object<span class="k3">*</span> o1 <span class="k3">=</span> objects<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>o1-&gt;Collidable<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">continue</span><span class="k2">;</span><span class="k2">}</span>
   <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i2 <span class="k3">=</span> i <span class="k3">+</span> <span class="n">1</span> <span class="k2">;</span> i2 <span class="k3">&lt;</span> sz <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i2<span class="k2">)</span> <span class="k2">{</span>
      Object<span class="k3">*</span> o2 <span class="k3">=</span> objects<span class="k2">[</span>i2<span class="k2">]</span><span class="k2">;</span>
      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>o2-&gt;Collidable<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">continue</span><span class="k2">;</span><span class="k2">}</span>
      <span class="k1">if</span> <span class="k2">(</span>o1-&gt;CheckCollisions<span class="k2">(</span>o2<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
         o1-&gt;CollidedWith<span class="k2">(</span>o2<span class="k2">)</span><span class="k2">;</span>
         o2-&gt;CollidedWith<span class="k2">(</span>o1<span class="k2">)</span><span class="k2">;</span>
      <span class="k2">}</span>
   <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>
That should get you a modest speed increase. I&#39;m not sure how using vector&#39;s iterator compares with indexing in terms of speed. It might be negligible in which case you could simply change your declaration of object to be of type std::vector. I would still extract the Object*&#39;s from the iterator though, instead of dereferencing them multiple times (dereferencing is when you access the object pointed to by a pointer or in this case, iterator).</p><p>After that you should look into quad trees and space partitioning to reduce the number of collision checks necessary.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 29 Jul 2013 22:51:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>
And sadly I cant write iter2 = iter+1 <br />I get bunch of errors saying I cant add int to list ...</p><p>But ignore what I wrote up , because I dont need to do iter2=iter+1 ,since its loop inside of loop and first loop  wich is iter is like equal 1 for example , second loop wich is iter2 is at beginig same as iter  , but after 1st chechk its not , because iter wont add +1 untill second loop is done ( Sry for bad english )</p><p>EXPLANATION =============================</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  5</span>  <span class="k2">{</span>
<span class="number">  6</span>  <span class="k1">for</span> <span class="k2">(</span><span class="k1">double</span> i<span class="k3">=</span><span class="n">1</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">4</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  7</span>  <span class="k2">{</span>
<span class="number">  8</span>    <span class="k1">for</span><span class="k2">(</span><span class="k1">double</span> j<span class="k3">=</span>i<span class="k2">;</span> j<span class="k3">&lt;</span><span class="n">4</span><span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  9</span>     cout <span class="k3">&lt;</span><span class="k3">&lt;</span><span class="s">"i: "</span><span class="k3">&lt;</span><span class="k3">&lt;</span> i <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" j; "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> j <span class="k3">&lt;</span><span class="k3">&lt;</span>endl<span class="k2">;</span>    
<span class="number"> 10</span>  <span class="k2">}</span>
<span class="number"> 11</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_802.html" target="_blank">system</a> <span class="k2">(</span><span class="s">"PAUSE"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  <span class="k2">}</span>
</div></div><p>



If you run this  , result will be:<br /> i: 1 j; 1<br /> i: 1 j; 2<br /> i: 1 j; 3<br /> i: 2 j; 2<br /> i: 2 j; 3<br /> i: 3 j; 3<br />Wich clearly shows that iters will be same at one point , but will be ignore and it will continue , so j (iter 2 ) will only be equal to i(iter) in 1 out of 3 cases untill i changes.</p><p>As far as I can understand this should work just fine?( but maybe creates unneccesery chechks ....)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kebapmanager)</author>
		<pubDate>Tue, 30 Jul 2013 00:54:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/613042/988100#target">kebapmanager</a> said:</div><div class="quote"><p>
And sadly I cant write iter2 = iter+1 
</p></div></div><p>
Oh, sorry bout that. It would be nice if list supported pointer addition, but you can do it a different way.</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="number">  2</span><span class="p">#include &lt;cstdio&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;list&gt;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="k1">using</span> <span class="k1">namespace</span> std<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> argc , <span class="k1">char</span><span class="k3">*</span><span class="k3">*</span> argv<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  8</span>   
<span class="number">  9</span>   list<span class="k3">&lt;</span>int&gt; lint<span class="k2">;</span>
<span class="number"> 10</span>   
<span class="number"> 11</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> <span class="n">5</span> <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>lint.push_back<span class="k2">(</span>i<span class="k2">)</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 12</span>   
<span class="number"> 13</span>   <span class="k1">for</span> <span class="k2">(</span>list<span class="k3">&lt;</span>int&gt;::iterator it <span class="k3">=</span> lint.begin<span class="k2">(</span><span class="k2">)</span> <span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> lint.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="k2">{</span>
<span class="number"> 14</span>      <span class="k1">int</span> i <span class="k3">=</span> <span class="k3">*</span>it<span class="k2">;</span>
<span class="number"> 15</span>      list<span class="k3">&lt;</span>int&gt;::iterator it2 <span class="k3">=</span> it<span class="k2">;</span>
<span class="number"> 16</span>      <span class="k3">+</span><span class="k3">+</span>it2<span class="k2">;</span>
<span class="number"> 17</span>      <span class="k1">while</span> <span class="k2">(</span>it2 <span class="k3">!</span><span class="k3">=</span> lint.end<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 18</span>         <span class="k1">int</span> i2 <span class="k3">=</span> <span class="k3">*</span>it2<span class="k2">;</span>
<span class="number"> 19</span>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%i vs %i\n"</span> , i , i2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>         <span class="k3">+</span><span class="k3">+</span>it2<span class="k2">;</span>
<span class="number"> 21</span>      <span class="k2">}</span>
<span class="number"> 22</span>   <span class="k2">}</span>
<span class="number"> 23</span>
<span class="number"> 24</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 25</span><span class="k2">}</span>
</div></div><p>

Or you can use vector (which in this case you should). It supports <span class="source-code">std::vector<span class="k3">&lt;</span>Type&gt;::iterator <span class="k1">operator</span><span class="k3">+</span><span class="k2">(</span>std::vector<span class="k3">&lt;</span>Type&gt;::iterator , <span class="k1">int</span><span class="k2">)</span><span class="k2">;</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 30 Jul 2013 09:24:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you alot for showing me all this , you are amazingly good at this O.o.</p><p>Il try to replace list with vectors and see what is gonna happen. Il let you know the results <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>===================================== SOLUTION =================================
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">int</span> sz <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>objects.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  2</span>      <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</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> sz <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  3</span>         GameObject<span class="k3">*</span> iter <span class="k3">=</span> objects<span class="k2">[</span>i<span class="k2">]</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>         <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span> <span class="k2">(</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Collidable<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span> <span class="k1">continue</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>         <span class="k1">for</span> <span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> i2 <span class="k3">=</span> i <span class="k3">+</span> <span class="n">1</span> <span class="k2">;</span> i2 <span class="k3">&lt;</span> sz <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i2<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  8</span>          GameObject<span class="k3">*</span> iter2 <span class="k3">=</span> objects<span class="k2">[</span>i2<span class="k2">]</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>          <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span><span class="k2">(</span>iter2<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Collidable<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span> <span class="k1">continue</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>          <span class="k1">if</span><span class="k2">(</span> <span class="k2">(</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>CheckCollisions<span class="k2">(</span> <span class="k2">(</span>iter2<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>
<span class="number"> 14</span>          <span class="k2">(</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Collided<span class="k2">(</span> <span class="k2">(</span>iter2<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>GetID<span class="k2">(</span><span class="k2">)</span>, <span class="k2">(</span>iter2<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>          <span class="k2">(</span>iter2<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Collided<span class="k2">(</span> <span class="k2">(</span>iter<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>GetID<span class="k2">(</span><span class="k2">)</span>, <span class="k2">(</span>iter<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>          <span class="k2">}</span>
<span class="number"> 17</span>         <span class="k2">}</span>
<span class="number"> 18</span>      <span class="k2">}</span>
</div></div><p>

Just like edgar suggested I switched to vectors , and now I can create 256 cubes before getting small lagg , and it stops rendering at 300 , wich I think will be fine for now , since my agme project is very small and I probbaly wont have more then 50 objects on screen , but I still wanted to learn something more and solve this problem , Thank you everyone for the help <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>(edit : typos)</p><p>Btw if anyone wants to tell me why is this way working soo much better, fell free to pm me because I am trying to figure it out myself now , but its not working <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kebapmanager)</author>
		<pubDate>Tue, 30 Jul 2013 13:13:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>IIRC direct access to random access containers (like a <span class="source-code">vector</span>) is constant complexity (<tt>O(1)</tt>) while for non-random access (like a <span class="source-code">list</span>) it&#39;s linear (<tt>O(n) n</tt> being the number of items in the container), and that&#39;s a big difference for large numbers. </p><p>Thou I think the most of the improvement comes since you decreased the times you call the Collision routine itself.</p><p>And that&#39;s also what Edgar suggested to do further, in case of many more objects, you should <i>partition</i> your space so that you only check for <i>meaningful</i> collisions.</p><p>Usually this is called the &quot;broad&quot; phase of collision detection, followed by a &quot;narrow&quot; one that is usually exactly like yours, checking for only objects that are &quot;close enough&quot; to actually collide.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Tue, 30 Jul 2013 16:36:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The difference comes from all the pointer dereferencing that a list does, which a vector does not. A list&#39;s items are linked together by pointers to the next and the previous node, and to get from one to the other you have to return *next. Jumping from address to address slows the computer down significantly in cases like this. A vector works so much faster because all it takes to access the vector is to do some pointer addition.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 31 Jul 2013 00:34:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you for explanation , but why is there list library then? , why would anyone use it if its soo much slower.<br />I also looked up what a list and vector libraries can do , and its about 80% same.</p><p>Anyhow thank you for explanation , even thought I still wonder how big games avoid this kind of problems ...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kebapmanager)</author>
		<pubDate>Wed, 31 Jul 2013 14:56:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, first of all there are MARKED differences between the two containers:</p><p> - Vectors support fast random-access ( <i>constant time</i> ) but are quite slow at inserting and removing objects in the middle</p><p> - conversely, lists support only a slower sequential access ( <i>linear time</i> ) but are extremely efficient in removing and inserting objects anywhere in the list (which is constantly sorted by comparison) in <i>constant time</i>.</p><p>So based on the type of operations (and algorythms) you will end up doing more frequently on the container you can choose the one that best fits your needs: <a href="http://www.allegro.cc/forums/thread/602089/836310#target">handy link</a></p><p>Secondly, AAA games implement all of those tricks here you just had a tip to, like spatial division of objects for a very efficient broad collision phase, custom memory management for quick allocation/deallocation, deadly optimized routines for the most frequent tasks, hard-core custom containers, shader tricks...etc..etc..etc...basically thou, you&#39;ll be digging this hard only when really pushing the resources available to their limit.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (pkrcel)</author>
		<pubDate>Wed, 31 Jul 2013 15:15:30 +0000</pubDate>
	</item>
</rss>
