<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Section of Code Lagging the Program</title>
		<link>http://www.allegro.cc/forums/view/618922</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 23 Jul 2024 21:30:59 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve got a program and it runs fine, but I when I added a moving star background the program starts to lag.  The stars don&#39;t lag and the mouse doesn&#39;t hesitate but clicking the blocks in the game lags horribly. The overall while loop seems to run at a constant speed per my std::cout commands.  It&#39;s just the mouse clicks or keyboard entry.  If I commnent the function call out, other than looking strange, it runs and functions fine.  </p><p>If you wouldn&#39;t mind, look this over and let me know where I&#39;ve messed up.  Thanks.</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">void</span> star_background<span class="k2">(</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">static</span> <span class="k1">int</span> y1 <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  4</span>    <span class="k1">static</span> <span class="k1">int</span> y2 <span class="k3">=</span> <span class="k3">-</span><span class="n">480</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</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>COLOR::BLACK<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>still, <span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</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>stars,COLOR::WHITE<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>stars, <span class="n">0</span>,y1, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>stars, <span class="n">0</span>,y2, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>      y1<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 14</span>       y2<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 15</span>     <span class="k1">if</span><span class="k2">(</span>y1&gt;480<span class="k2">)</span>
<span class="number"> 16</span>        y1 <span class="k3">=</span><span class="k3">-</span><span class="n">480</span><span class="k2">;</span>
<span class="number"> 17</span>      <span class="k1">if</span><span class="k2">(</span>y2&gt;478<span class="k2">)</span>
<span class="number"> 18</span>           y2 <span class="k3">=</span> <span class="k3">-</span><span class="n">480</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="k2">}</span> <span class="c">// end of star_background</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Wed, 26 Jun 2024 21:13:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>1. Huge issue is <b>al_convert_mask_to_alpha</b>. It should be done once right after the bitmap is loaded or created. That function goes through every pixel. Does a comparison to your color and sets alpha to zero if there is a match. <b>EVERY</b> pixel. Very time consuming.<br />2. is target restored? Don&#39;t set it to another bitmap if not restored back to original bitmap.<br />3. SEPARATE logic and drawing. Logic timing should be consistent. Drawing should be done when it can and when all logic is done.</p><p>My preferred order<br />1. process all input<br />2. do all logic based on current input states (set to process consitently at 30 times per second using a timer).<br />3. do all drawing when all done with logic (FPS is based on how many times I can still draw the screen per second)<br />4. goto 1.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Thu, 27 Jun 2024 01:04:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>DanielH is right about al_convert_mask_to_alpha, it should only be called once.</p><p>Other than that, the issue is not in the code you&#39;ve shown.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 27 Jun 2024 19:01:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks guys.  I thought I was probably calling a single call over and over. I did the same thing with random number seed. </p><p>Daniel, <br />I have a few lines of setting target to buffer and back to target etc.  I&#39;m not sure why.  If I take out the &quot;target&quot; bitmap, the process doesn&#39;t work.  My limited logic tells me I should be able to make the buffer the target bitmap and run with it, but if I don&#39;t flip back and forth, some of the scaling commands don&#39;t work.  In short, I don&#39;t understand how that process works so I&#39;m dropping copied code and if it works I just go with it.   I&#39;m sure I&#39;m misusing at some level.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Thu, 27 Jun 2024 20:10:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The &quot;target&quot; is the current bitmap ALL drawing is done to. Yes, set it to your buffer. Then set is back to the display&#39;s buffer to draw your buffer to the display&#39;s buffer.</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">// save current target (may or may not be display, depending on game</span>
<span class="number">  2</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> target <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="c">// set to your buffer</span>
<span class="number">  5</span><a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="c">// do your drawing here (or call drawing function)</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="c">// restore back to previous target</span>
<span class="number"> 10</span><a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>target<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="c">// draw your buffer to target</span>
<span class="number"> 13</span><a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>buffer, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span><span class="c">//al_draw_scaled_bitmap(buffer, 0, 0, al_get_bitmap_width(buffer), al_get_bitmap_height(buffer), 0, 0, al_get_display_width(display), al_get_display_height(display), 0);</span>
<span class="number"> 15</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>
</div></div><p>


or set your buffer then set to display&#39;s buffer. No need to store current target.
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

I do the first just in case the display is not my final target. It usually always is.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Thu, 27 Jun 2024 20:52:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thx all,</p><p>So Daniel, I don&#39;t necessarily need a &quot;target&quot; bitmap? </p><p>I&#39;m trying to understand why one would need to write to buffer_one, then write buffer_one to buffer_too, then buffer_too to the display?  Seems like buffer_too is an extra step.  </p><p>Can you give me an example of why you would need to do that?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Thu, 27 Jun 2024 23:12:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can do all your drawing to the display or all your drawing to a bitmap then draw that bitmap to the display. Depends on what you want.</p><p>Personally, I have a buffer bitmap of pre-determined, non-changing size. I do all drawing to it. Then I scale it to whatever size the display is.</p><p>Why? 1. if the display size never changed then I might draw only to display. 2. I don&#39;t want the display to determine my graphics sizes. 16x16 tiles might be too small to display without scaling. Same goes for any fonts I have. I prefer a set size buffer for that reason. Then scale to any size needed at once.</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">// option 1</span>
<span class="number">  2</span><span class="k1">void</span> draw_to_buffer<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display, <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> buffer<span class="k2">)</span>
<span class="number">  3</span><span class="k2">{</span>
<span class="number">  4</span>    <span class="c">// save current target (may or may not be display, depending on game</span>
<span class="number">  5</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> target <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>    <span class="c">// set to your buffer</span>
<span class="number">  8</span>    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>    <span class="c">// do your drawing here (or call drawing function)</span>
<span class="number"> 11</span>
<span class="number"> 12</span>    <span class="c">// restore back to previous target</span>
<span class="number"> 13</span>    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>target<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>    <span class="c">// draw your buffer to target</span>
<span class="number"> 16</span>    <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span>buffer, <span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>buffer<span class="k2">)</span>, <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>buffer<span class="k2">)</span>, <span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span>display<span class="k2">)</span>,    <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span>display<span class="k2">)</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</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"> 18</span><span class="k2">}</span>
<span class="number"> 19</span>
<span class="number"> 20</span><span class="c">// option 2</span>
<span class="number"> 21</span><span class="k1">void</span> draw_to_display<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">)</span>
<span class="number"> 22</span><span class="k2">{</span>
<span class="number"> 23</span>    <span class="c">// set target to display's buffer</span>
<span class="number"> 24</span>    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>    <span class="c">// do your drawing here (or call drawing function)</span>
<span class="number"> 27</span>
<span class="number"> 28</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"> 29</span><span class="k2">}</span>
<span class="number"> 30</span>
<span class="number"> 31</span><span class="c">// option 3</span>
<span class="number"> 32</span><span class="k1">void</span> draw_to_display<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">)</span>
<span class="number"> 33</span><span class="k2">{</span>
<span class="number"> 34</span>    <span class="c">// by default, target is already set to display's buffer.</span>
<span class="number"> 35</span>    <span class="c">// no need to set target unless you changed it somewhere else</span>
<span class="number"> 36</span>
<span class="number"> 37</span>    <span class="c">// do your drawing here (or call drawing function)</span>
<span class="number"> 38</span>
<span class="number"> 39</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"> 40</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 28 Jun 2024 00:05:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Daniel,</p><p>One more question concerning buffers.  I&#39;ve been drawing to a buffer bitmap and then flipping it to the display.  Are you saying the display already has a buffer by default?  Or is drawing to the display literally drawing to the screen directly?</p><p>Thanks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Fri, 28 Jun 2024 21:01:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, by default, the display has a main bitmap and the back buffer bitmap.</p><p>You draw to the back buffer then flip them. You can remove the back buffer with an ALLEGRO_SINGLE_BUFFER option.</p><p>If you set single buffer then you don&#39;t need to call al_flip_display as there is nothing to flip.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 28 Jun 2024 21:27:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Daniel thanks for the insight.  I think I&#39;m going to try Option 2.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Fri, 28 Jun 2024 22:59:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sounds great. If you don&#39;t need to change target to another bitmap then you don&#39;t need to call <span class="source-code"><a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 28 Jun 2024 23:36:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>All, </p><p>Ok, I moved my al_convert_mask_to_alpha() to where I initialize the bitmap files.   I removed all references of going back and forth with target / buffer bitmaps.   The visual aspect of the program looks great.  The moving star background works well.  However, my lag is still present and it grows longer between clicks.   </p><p>My question is, is there something that would cause the event queue to lag?  I’ve put in std::cout print outs at different locations in the program.  Granted not scientific or exact, but it does expose variations.   At program start, each time through the game loop the timer is checked (timer event) so looking at my output I have a one to one condition, maybe an occasional one to two.</p><p>“Loop Check” <br />“Timer Check”<br />“Loop Check” <br />“Timer Check”<br />“Loop Check” <br />“Timer Check”</p><p>(Loop check is located just underneath the while() statement.  The Timer check is the first item in the if(event.type == ALLEGRO_EVENT_TIMER) section)</p><p>Then as I start clicking as part of the game, the gap between them grows to one Timer Check to five or six Loop Checks.  If I stop clicking after 5-10 sec it goes back to one to one.   It’s almost like the event queue, which would include key down and mouse clicks slows down or doesn’t samples as fast.  I must point out, if  you have the patience, the games functions as it should.  It&#39;s just the mouse click results lag horribly. </p><p>While the star code earlier in the thread may not be problematic, when I comment it out my lag issue goes away.   Maybe it’s the bitmaps being used with in the star code. </p><p>Any ideas / comments are welcome.  If I don’t hear back, have a great 4th holiday.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Thu, 04 Jul 2024 00:29:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Is it possible to post the code? At least the loop and event sections?</p><p>I suspect the issue is there.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Thu, 04 Jul 2024 01:32:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;re likely drawing once for every mouse or keyboard event. That&#39;s a no-no. Post your event handling code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 04 Jul 2024 19:40:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ll send the loop data.  First I want to ask a follow up on my original question. </p><p>I thought I no longer needed a target bitmap and I could work with the buffer bitmap only.   But when I commented the target code out, my screen won&#39;t change from the title screen.  If I choose Setup, the screen changes fine.  If I choose Play, it doesn&#39;t.  Below is the code for drawing the game play itself.  Can you tell me why I would still need the target code?  I&#39;m thinking I started using it when I started working with the scale command.  Maybe it requires it.  Let me know what you think.  Thanks. 
</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">void</span> display_print<span class="k2">(</span>CARDS Cards<span class="k2">[</span><span class="k2">]</span>,<span class="k1">int</span> nError,<span class="k1">int</span> nGameOver,<span class="k1">int</span> nTurnPos,<span class="k1">int</span> nPlayer<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  target <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number">  4</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>  star_background<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>  display_verbiage<span class="k2">(</span>nError,nGameOver,nTurnPos,nPlayer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>  draw_cards<span class="k2">(</span>Cards<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>target<span class="k2">)</span><span class="k2">;</span>                                                           
<span class="number"> 10</span>    <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span>buffer, <span class="n">0</span>, <span class="n">0</span>, nBufferWD, nBufferHT, <span class="n">0</span>, <span class="n">0</span>, nDispWD, nDispHT, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</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"> 12</span><span class="k2">}</span> <span class="c">// end display_print</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Tue, 09 Jul 2024 01:06:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>ALL</b> drawing functions draw to the target bitmap. What&#39;s your target? Is it the display&#39;s back buffer or your buffer?</p><p>If you don&#39;t use a buffer and always draw to the display then you don&#39;t need to mess with the targeting.</p><p>If you use a buffer and want to draw to that buffer then you need to change the current target to that buffer. Draw to the buffer. Then change the current target again back to previous target (the display&#39;s back buffer). Then draw your buffer to the display.</p><p>Scaling is tricky if you don&#39;t use a buffer. You would have to scale each bitmap drawn to the display and calculate the scaled position. Or use transforms, which is what the scale functions use in the background.</p><p>I find it so much easier to use a buffer and scale it once after I draw everything to it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Tue, 09 Jul 2024 02:49:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is a situation where I copied the scale code &amp; altered for my needs without understanding what is going on.</p><p>If I comment out both lines 3 &amp; 9, the program won&#39;t run.  Or the screen won&#39;t change from the title screen. </p><p>I don&#39;t write to target (Line 3)so I&#39;m not sure why it&#39;s needed.  In line 4 I set the targeted bitmap to buffer.  I draw in star background(), display verbiage(), &amp; draw cards() functions.  I assume they are drawing to the buffer bitmap since it&#39;s the last set as the targeted bitmap. Upon returning I scale the buffer bitmap and flip.  The actual target bit map in line 3 isn&#39;t used at all.  </p><p>In any case, I vaguely remember when looking into the scale command, someone saying I needed to switch the targeted bitmap to a second bitmap (target bitmap in this case) before scaling the buffer bitmap.  It&#39;s like they are saying a targeted bitmap can&#39;t be scaled.  This maybe the case, but I&#39;m not understanding why. </p><p>Thanks</p><p><b>*UPDATE</b>*<br />Ok,  I researched further. As I understand, the scale command scales the bitmap listed in the command (buffer) to a second bitmap that is currently targeted. The the flip writes the targeted bitmap to the display.  I thought buffer bitmap was being flipped.  The targeted bitmap (target in this case) in my program is the scaled version of the buffer bitmap.  Now I get it I think.</p><p>BTW using names like target and buffer in the program makes sense, but not very helpful when trying to explain your program flow.  I think I need to come up with a new naming scheme.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Tue, 09 Jul 2024 23:52:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There&#39;s a bit of confusion on &#39;target&#39; especially. It&#39;s just a bitmap. By default it is the display&#39;s back buffer bitmap. </p><p>I didn&#39;t make the names</p><p>Target = Destination<br />Buffer = temp storage</p><p>In allegro 4 and previous, you could specify the target as a parameter<br /><span class="source-code"><span class="k1">void</span> <a href="http://www.allegro.cc/manual/blit"><span class="a">blit</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a> <span class="k3">*</span>source, <a href="http://www.allegro.cc/manual/BITMAP"><span class="a">BITMAP</span></a> <span class="k3">*</span>dest, <span class="k1">int</span> source_x, <span class="k1">int</span> source_y, <span class="k1">int</span> dest_x, <span class="k1">int</span> dest_y, <span class="k1">int</span> width, <span class="k1">int</span> height<span class="k2">)</span><span class="k2">;</span></span></p><p>in this function dest is the target bitmap of the draw call. </p><p>In allegro 5, target is implied<br /><span class="source-code"><span class="k1">void</span> <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>source, <span class="k1">float</span> dx, <span class="k1">float</span> dy, <span class="k1">int</span> flags<span class="k2">)</span><span class="k2">;</span></span></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">void</span> display_print<span class="k2">(</span>CARDS Cards<span class="k2">[</span><span class="k2">]</span>,<span class="k1">int</span> nError,<span class="k1">int</span> nGameOver,<span class="k1">int</span> nTurnPos,<span class="k1">int</span> nPlayer<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="c">// get current bitmap target</span>
<span class="number">  4</span>  target <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_target_bitmap"><span class="a">al_get_target_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number">  5</span>
<span class="number">  6</span>  <span class="c">// set current bitmap target to the bitmap buffer</span>
<span class="number">  7</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>  <span class="c">// draw to target bitmap</span>
<span class="number"> 10</span>  star_background<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>  display_verbiage<span class="k2">(</span>nError,nGameOver,nTurnPos,nPlayer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>  draw_cards<span class="k2">(</span>Cards<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>
<span class="number"> 14</span>  <span class="c">// set to previous target (probably the display's bitmap buffer)</span>
<span class="number"> 15</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>target<span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 16</span>
<span class="number"> 17</span>  <span class="c">// draw to target bitmap                                                         </span>
<span class="number"> 18</span>  <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span>buffer, <span class="n">0</span>, <span class="n">0</span>, nBufferWD, nBufferHT, <span class="n">0</span>, <span class="n">0</span>, nDispWD, nDispHT, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>  <span class="c">// swap front and back buffers</span>
<span class="number"> 21</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"> 22</span><span class="k2">}</span>
</div></div><p>

Like I said, you don&#39;t need your bitmap if you draw directly to the display back bitmap.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> display_print<span class="k2">(</span>CARDS Cards<span class="k2">[</span><span class="k2">]</span>,<span class="k1">int</span> nError,<span class="k1">int</span> nGameOver,<span class="k1">int</span> nTurnPos,<span class="k1">int</span> nPlayer<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="k2">{</span>
  <span class="c">// draw to display's back buffer</span>
  star_background<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  display_verbiage<span class="k2">(</span>nError,nGameOver,nTurnPos,nPlayer<span class="k2">)</span><span class="k2">;</span>
  draw_cards<span class="k2">(</span>Cards<span class="k2">)</span><span class="k2">;</span>

  <span class="c">// swap front and back buffers</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="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Wed, 10 Jul 2024 01:29:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Daniel.</p><p>At some point in this thread you and Edgar asked for my game loop code so you could see the various events.  Keep in mind, I didn&#39;t write it with the intent of sharing with others.  If there are process improvements that I can make, I&#39;m excited to hear them. I&#39;m always open to learn from the more experienced.  If your just critiquing my coding technique, I already know it&#39;s sloppy <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=";D" border="0" />.  </p><p>This code is in its own file and function.   In main() I show title screen and wait for choice of Play, Setup, &amp; Quit.  If Play is chosen, we end up 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="k1">while</span> <span class="k2">(</span><span class="k3">!</span>bQuit<span class="k2">)</span>
<span class="number">   2</span><span class="k2">{</span>
<span class="number">   3</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>queue, <span class="k3">&amp;</span>event<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>nTurn <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>                                                                     <span class="c">// Alters palyer's turn arrow</span>
<span class="number">   6</span>      nTurnPos <span class="k3">=</span> <span class="n">450</span><span class="k2">;</span>
<span class="number">   7</span>   <span class="k1">if</span><span class="k2">(</span>nTurn <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span>
<span class="number">   8</span>       nTurnPos <span class="k3">=</span> <span class="n">480</span><span class="k2">;</span>
<span class="number">   9</span>
<span class="number">  10</span>    <span class="k1">if</span><span class="k2">(</span>nChoiceCount <span class="k3">=</span><span class="k3">=</span><span class="n">2</span><span class="k2">)</span>
<span class="number">  11</span>    <span class="k2">{</span>
<span class="number">  12</span>
<span class="number">  13</span>      <span class="k1">if</span><span class="k2">(</span>bDraw <span class="k3">=</span><span class="k3">=</span> <span class="k1">false</span><span class="k2">)</span>                                               <span class="c">// clears card flipped status for card choice that didn't match</span>
<span class="number">  14</span>        <span class="k2">{</span>                                                           <span class="c">// bDraw is made false after screen draw and stall of non matching cards.</span>
<span class="number">  15</span>        nRest <span class="k3">=</span> <span class="n">38</span><span class="k2">;</span>
<span class="number">  16</span>        <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>count<span class="k3">&lt;</span>CQTY<span class="k2">;</span>count<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  17</span>         <span class="k2">{</span>
<span class="number">  18</span>             <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>Cards<span class="k2">[</span>count<span class="k2">]</span>.bMatched<span class="k2">)</span>
<span class="number">  19</span>             <span class="k2">{</span>
<span class="number">  20</span>                Cards<span class="k2">[</span>count<span class="k2">]</span>.bFlipped <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  21</span>             <span class="k2">}</span>
<span class="number">  22</span>         <span class="k2">}</span> <span class="c">// Card Flip Cleared</span>
<span class="number">  23</span>          nChoiceCount<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number">  24</span>        <span class="k2">}</span> <span class="c">//if bDraw</span>
<span class="number">  25</span>     <span class="k2">}</span> <span class="c">//end nChoiceCount if</span>
<span class="number">  26</span>
<span class="number">  27</span>
<span class="number">  28</span>    <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN<span class="k2">)</span>
<span class="number">  29</span>  <span class="k2">{</span>
<span class="number">  30</span>      nKey <span class="k3">=</span> event.keyboard.keycode-1<span class="k2">;</span>                                <span class="c">// nKey is Card array index.  Needs to start with zero.</span>
<span class="number">  31</span>      <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE <span class="k3">&amp;</span><span class="k3">&amp;</span> nGameOver <span class="k3">=</span><span class="k3">=</span> <span class="n">24</span><span class="k2">)</span>  <span class="c">// Checks for Escape key after all 24 cards have been played</span>
<span class="number">  32</span>            <span class="k2">{</span>
<span class="number">  33</span>             <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  34</span>            <span class="k2">}</span>
<span class="number">  35</span>      <span class="k1">if</span><span class="k2">(</span>event.keyboard.keycode <span class="k3">&gt;</span><span class="k3">=</span> ALLEGRO_KEY_A <span class="k3">&amp;</span><span class="k3">&amp;</span> event.keyboard.keycode <span class="k3">&lt;</span><span class="k3">=</span> ALLEGRO_KEY_X <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>Cards<span class="k2">[</span>nKey<span class="k2">]</span>.bMatched<span class="k2">)</span>
<span class="number">  36</span>     <span class="k2">{</span>                                        <span class="c">// Loop for keyboard choice A ~ X</span>
<span class="number">  37</span>         Cards<span class="k2">[</span>nKey<span class="k2">]</span>.bFlipped <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  38</span>        <span class="k1">if</span><span class="k2">(</span>nChoiceCount <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> nFirstChoice <span class="k3">=</span> nKey<span class="k2">;</span>
<span class="number">  39</span>        <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>nChoiceCount <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span><span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>nKey <span class="k3">=</span><span class="k3">=</span> nFirstChoice<span class="k2">)</span><span class="k2">)</span> nError <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>  <span class="c">// Checking for hitting same key</span>
<span class="number">  40</span>
<span class="number">  41</span>        <span class="k1">else</span>
<span class="number">  42</span>        <span class="k2">{</span>
<span class="number">  43</span>          nSecondChoice <span class="k3">=</span> nKey<span class="k2">;</span>
<span class="number">  44</span>          nError <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>                                            <span class="c">// clears any previous duplicate choice/</span>
<span class="number">  45</span>          nChoiceCount<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  46</span>        <span class="k2">}</span>
<span class="number">  47</span>
<span class="number">  48</span>     <span class="k2">}</span>  <span class="c">// end if for block choice</span>
<span class="number">  49</span>
<span class="number">  50</span>     <span class="k1">if</span><span class="k2">(</span>nChoiceCount <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span>
<span class="number">  51</span>     <span class="k2">{</span>
<span class="number">  52</span>       <span class="k1">if</span><span class="k2">(</span>Cards<span class="k2">[</span>nFirstChoice<span class="k2">]</span>.nValue <span class="k3">=</span><span class="k3">=</span> Cards<span class="k2">[</span>nSecondChoice<span class="k2">]</span>.nValue <span class="k2">)</span>  <span class="c">// Sets matched flag if values match</span>
<span class="number">  53</span>       <span class="k2">{</span>
<span class="number">  54</span>        Cards<span class="k2">[</span>nFirstChoice<span class="k2">]</span>.bMatched <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  55</span>        Cards<span class="k2">[</span>nSecondChoice<span class="k2">]</span>.bMatched <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  56</span>              nGameOver<span class="k3">+</span><span class="k3">=</span><span class="n">2</span><span class="k2">;</span>                                                 <span class="c">// Adds to more to end of game total</span>
<span class="number">  57</span>        nPlayer<span class="k2">[</span>nTurn<span class="k2">]</span><span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  58</span>          bTurn <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  59</span>       <span class="k2">}</span> <span class="c">// end match if</span>
<span class="number">  60</span>     <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>Cards<span class="k2">[</span>nFirstChoice<span class="k2">]</span>.bFlipped <span class="k3">&amp;</span><span class="k3">&amp;</span> Cards<span class="k2">[</span>nSecondChoice<span class="k2">]</span>.bFlipped <span class="k2">)</span><span class="k3">&amp;</span><span class="k3">&amp;</span><span class="k2">(</span>Cards<span class="k2">[</span>nFirstChoice<span class="k2">]</span>.nValue <span class="k3">!</span><span class="k3">=</span> Cards<span class="k2">[</span>nSecondChoice<span class="k2">]</span>.nValue <span class="k2">)</span><span class="k2">)</span>
<span class="number">  61</span>     <span class="k2">{</span>                                                      <span class="c">// allows two nonmatching cards to be drawn and stay visible for X.XX secs</span>
<span class="number">  62</span>       bDraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>                                      <span class="c">// bDraw prevents the resetting of the cards prior to being visible.</span>
<span class="number">  63</span>
<span class="number">  64</span>     <span class="k2">}</span>
<span class="number">  65</span>       <span class="k1">switch</span><span class="k2">(</span>nTurn<span class="k2">)</span>                                      <span class="c">// Switch to alter players back and forth.</span>
<span class="number">  66</span>          <span class="k2">{</span>
<span class="number">  67</span>             <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span>
<span class="number">  68</span>               <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>bTurn<span class="k2">)</span>
<span class="number">  69</span>                  nTurn <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  70</span>               bTurn <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  71</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number">  72</span>             <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span>
<span class="number">  73</span>               <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>bTurn<span class="k2">)</span>
<span class="number">  74</span>                 nTurn <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  75</span>               bTurn <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  76</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number">  77</span>            <span class="k2">}</span> <span class="c">// end nTurn switch</span>
<span class="number">  78</span>     <span class="k2">}</span><span class="c">// end if nChoiceCount == 2 actions</span>
<span class="number">  79</span>    <span class="k2">}</span><span class="c">// end if event.type</span>
<span class="number">  80</span>
<span class="number">  81</span>     <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_AXES<span class="k2">)</span>
<span class="number">  82</span>     <span class="k2">{</span>
<span class="number">  83</span>       nPos_y <span class="k3">=</span> event.mouse.y<span class="k2">;</span>
<span class="number">  84</span>       nPos_x <span class="k3">=</span> event.mouse.x<span class="k2">;</span>
<span class="number">  85</span>      <span class="k2">}</span> <span class="c">// end mouse axis</span>
<span class="number">  86</span>
<span class="number">  87</span>     <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN<span class="k2">)</span> <span class="c">//Checking to see if mouse location is within Card location</span>
<span class="number">  88</span>     <span class="k2">{</span>
<span class="number">  89</span>    
<span class="number">  90</span>       <span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> count <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>count<span class="k3">&lt;</span>CQTY<span class="k2">;</span>count<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  91</span>         <span class="k2">{</span>
<span class="number">  92</span>        <span class="k1">if</span><span class="k2">(</span>nPos_x <span class="k3">&gt;</span><span class="k3">=</span> <span class="k2">(</span>Cards<span class="k2">[</span>count<span class="k2">]</span>.fTX<span class="k3">*</span>fPercent_Diff_WD<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> nPos_y <span class="k3">&gt;</span><span class="k3">=</span> <span class="k2">(</span>Cards<span class="k2">[</span>count<span class="k2">]</span>.fTY<span class="k3">*</span>fPercent_Diff_HT<span class="k2">)</span><span class="k2">)</span>
<span class="number">  93</span>        <span class="k2">{</span>
<span class="number">  94</span>           <span class="k1">if</span><span class="k2">(</span>nPos_x <span class="k3">&lt;</span><span class="k3">=</span> <span class="k2">(</span>Cards<span class="k2">[</span>count<span class="k2">]</span>.fBX<span class="k3">*</span>fPercent_Diff_WD<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> nPos_y <span class="k3">&lt;</span><span class="k3">=</span> <span class="k2">(</span>Cards<span class="k2">[</span>count<span class="k2">]</span>.fBY<span class="k3">*</span>fPercent_Diff_HT<span class="k2">)</span><span class="k2">)</span>
<span class="number">  95</span>           <span class="k2">{</span>
<span class="number">  96</span>              <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>Cards<span class="k2">[</span>count<span class="k2">]</span>.bMatched<span class="k2">)</span>                  <span class="c">// Checks to see if choice is already matched or chosen.</span>
<span class="number">  97</span>              <span class="k2">{</span>
<span class="number">  98</span>            Cards<span class="k2">[</span>count<span class="k2">]</span>.bFlipped <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  99</span>            <span class="k1">if</span><span class="k2">(</span>nChoiceCount <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> nFirstChoice <span class="k3">=</span> count<span class="k2">;</span>
<span class="number"> 100</span>            <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>nChoiceCount <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span><span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>count <span class="k3">=</span><span class="k3">=</span> nFirstChoice<span class="k2">)</span><span class="k2">)</span> nError <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 101</span>                  <span class="k1">else</span>
<span class="number"> 102</span>             <span class="k2">{</span>
<span class="number"> 103</span>              nSecondChoice <span class="k3">=</span> count<span class="k2">;</span>
<span class="number"> 104</span>              nError <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 105</span>              nChoiceCount<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 106</span>             <span class="k2">}</span> <span class="c">//end else</span>
<span class="number"> 107</span>             <span class="k2">}</span> <span class="c">//end if for matched card re-click</span>
<span class="number"> 108</span>           <span class="k2">}</span><span class="c">// end if for bottom corner check</span>
<span class="number"> 109</span>        <span class="k2">}</span> <span class="c">//end if for top corner check</span>
<span class="number"> 110</span>         <span class="k2">}</span><span class="c">// end for</span>
<span class="number"> 111</span>      <span class="k1">if</span><span class="k2">(</span>nChoiceCount <span class="k3">=</span><span class="k3">=</span> <span class="n">2</span><span class="k2">)</span>                                 <span class="c">// Sets matched flag if values match</span>
<span class="number"> 112</span>      <span class="k2">{</span>
<span class="number"> 113</span>        <span class="k1">if</span><span class="k2">(</span>Cards<span class="k2">[</span>nFirstChoice<span class="k2">]</span>.nValue <span class="k3">=</span><span class="k3">=</span> Cards<span class="k2">[</span>nSecondChoice<span class="k2">]</span>.nValue <span class="k2">)</span>
<span class="number"> 114</span>        <span class="k2">{</span>
<span class="number"> 115</span>          Cards<span class="k2">[</span>nFirstChoice<span class="k2">]</span>.bMatched <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 116</span>          Cards<span class="k2">[</span>nSecondChoice<span class="k2">]</span>.bMatched <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 117</span>              nGameOver <span class="k3">+</span><span class="k3">=</span> <span class="n">2</span> <span class="k2">;</span>                              <span class="c">// adds 2 to game end total</span>
<span class="number"> 118</span>          nPlayer<span class="k2">[</span>nTurn<span class="k2">]</span><span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 119</span>              bTurn <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 120</span>        <span class="k2">}</span> <span class="c">// end match if</span>
<span class="number"> 121</span>
<span class="number"> 122</span>          <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>Cards<span class="k2">[</span>nFirstChoice<span class="k2">]</span>.bFlipped <span class="k3">&amp;</span><span class="k3">&amp;</span> Cards<span class="k2">[</span>nSecondChoice<span class="k2">]</span>.bFlipped <span class="k2">)</span><span class="k3">&amp;</span><span class="k3">&amp;</span><span class="k2">(</span>Cards<span class="k2">[</span>nFirstChoice<span class="k2">]</span>.nValue <span class="k3">!</span><span class="k3">=</span> Cards<span class="k2">[</span>nSecondChoice<span class="k2">]</span>.nValue <span class="k2">)</span><span class="k2">)</span>
<span class="number"> 123</span>          <span class="k2">{</span>                                                      <span class="c">// allows two non-matching cards to be drawn and stay visible for X.XX secs</span>
<span class="number"> 124</span>             bDraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>                                      <span class="c">// bDraw prevents the resetting of the cards prior to being visible.</span>
<span class="number"> 125</span>
<span class="number"> 126</span>          <span class="k2">}</span>
<span class="number"> 127</span>          <span class="k1">switch</span><span class="k2">(</span>nTurn<span class="k2">)</span>                                         <span class="c">// Switch to alter players back and forth.</span>
<span class="number"> 128</span>          <span class="k2">{</span>
<span class="number"> 129</span>               <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span>
<span class="number"> 130</span>                  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>bTurn<span class="k2">)</span>
<span class="number"> 131</span>                     nTurn <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 132</span>                  bTurn <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> <span class="n">1</span><span class="k2">:</span>
<span class="number"> 135</span>                 <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>bTurn<span class="k2">)</span>
<span class="number"> 136</span>                    nTurn <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 137</span>                  bTurn <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 138</span>                  <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 139</span>             <span class="k2">}</span> <span class="c">// end nTurn switch</span>
<span class="number"> 140</span>         <span class="k2">}</span><span class="c">// end if nChoiceCount == 2 actions</span>
<span class="number"> 141</span>    <span class="k2">}</span><span class="c">// end button down</span>
<span class="number"> 142</span>
<span class="number"> 143</span>    <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE<span class="k2">)</span>
<span class="number"> 144</span>    <span class="k2">{</span>
<span class="number"> 145</span>      bQuit <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>    <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="number"> 148</span>    <span class="k2">{</span>
<span class="number"> 149</span>      <span class="k1">if</span><span class="k2">(</span>bDraw <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span>
<span class="number"> 150</span>          nRest--<span class="k2">;</span>
<span class="number"> 151</span>      <span class="k1">if</span><span class="k2">(</span>bDraw <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> nRest <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 152</span>        bDraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 153</span>
<span class="number"> 154</span>       display_print<span class="k2">(</span>Cards,nError,nGameOver,nTurnPos,nPlayer<span class="k2">)</span><span class="k2">;</span>   <span class="c">//  After all the changes and checks are made, calls card drawing, screen flipping  function.</span>
<span class="number"> 155</span>                                                              
<span class="number"> 156</span>
<span class="number"> 157</span> <span class="k2">}</span><span class="c">// end while()</span>
<span class="number"> 158</span>
<span class="number"> 159</span><span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 160</span><span class="k2">}</span> <span class="c">//end game_play()</span>
</div></div><p>

Thanks for taking the time to look it over.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Wed, 10 Jul 2024 18:00:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Couple things I see</p><p>I&#39;ll preface this by saying this is my opinion. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>Your braces don&#39;t match. The end brace for timer is labeled // end while. That puts the draw call inside the timer code.
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
    <span class="k2">{</span>
      <span class="k1">if</span><span class="k2">(</span>bDraw <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span><span class="k2">)</span>
          nRest--<span class="k2">;</span>
      <span class="k1">if</span><span class="k2">(</span>bDraw <span class="k3">=</span><span class="k3">=</span> <span class="k1">true</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> nRest <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
        bDraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
    <span class="k2">}</span> <span class="c">// end timer</span>

    <span class="c">// Never link drawing to a timer. NEVER. Timers are for logic. </span>
    display_print<span class="k2">(</span>Cards,nError,nGameOver,nTurnPos,nPlayer<span class="k2">)</span><span class="k2">;</span> 
    <span class="c">// drawing should happen every time something changes on the screen. </span>
    <span class="c">// a boolean dirty variable can be used if it's dirty and needs a refresh</span>
    <span class="c">// that should be set by the logic not the timer. dirty = (did_something_change)</span>
</pre></div></div><p>

That is probably most of your lag problem ... maybe. I don&#39;t like waiting for events.</p><p>the other lag I see is that you are doing a ton of logic during an event. That can&#39;t be helped unless you make some variables to store your input.</p><p>The timer should regulate the logic not your input events. That way the logic is running at the same speed regardless the computer speed. Input events are there to set your keyboard/mouse state variables (if you had them). They should be short and fast. They should not to tie up processing speed by doing logic in the events themselves.</p><p>All you need is 2 extra variables
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">bool</span> mouse_is_being_pressed <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="k1">bool</span> mouse_was_pressed_since_i_last_did_logic <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
</pre></div></div><p>

These are set in your mouse button up/down events. </p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_DOWN<span class="k2">)</span>
<span class="k2">{</span>
    mouse_is_being_pressed <span class="k3">=</span>
    mouse_was_pressed_since_i_last did_logic <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="k2">}</span>
<span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_MOUSE_BUTTON_UP<span class="k2">)</span>
<span class="k2">{</span>
    mouse_is_being_pressed <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Your mouse_axes event code is short enough it&#39;s fine. Then all the logic code you currently have in your button up/down should be put in the timer. or another function to keep clean.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="k2">{</span>
    <span class="k1">if</span> <span class="k2">(</span>mouse_was_pressed_since_i_last_did_logic<span class="k2">)</span>
    <span class="k2">{</span>
        <span class="c">// do your code that checks</span>
    <span class="k2">}</span>
    <span class="k1">else</span>
    <span class="k2">{</span>
    <span class="k2">}</span>

    mouse_was_pressed_since_i_last_did_logic <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

add the same for keyboard if you need to
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Wed, 10 Jul 2024 20:45:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Daniel.  I&#39;ll look and see how I can rearrange.  However I did find one thing confusing (shock huh?).  When I first wrote a small program to test an idea for a moving star background.  I notice the stars looks great until I started clicking the mouse.  Then it would hang for a split second or speed up. At that time I was told on this site, can&#39;t remember by who, to put the drawing in the timer event so it would be uniformed.  The thought being the time event is going to be true with each click of the clock.   Does this make sense or did I misunderstand?  Or is it a personal choice type thing?   </p><p>Thanks again for all the help.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Thu, 11 Jul 2024 01:27:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have heard that too and I&#39;ve been trying to stop it. They think they can get uniform control by putting the drawing in the timer.</p><p>The logic handles control not the drawing.</p><p>The logic should be in the timer if you want uniformity. The drawing should either be done every loop or using the dirty boolean like I said.</p><p>Try putting the draw call outside of timer for the time being and see if that helps at all.</p><p>There are a couple other little things:
</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">switch</span><span class="k2">(</span>nTurn<span class="k2">)</span>                                      <span class="c">// Switch to alter players back and forth.</span>
<span class="number">  2</span>          <span class="k2">{</span>
<span class="number">  3</span>             <span class="k1">case</span> <span class="n">0</span><span class="k2">:</span>
<span class="number">  4</span>               <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>bTurn<span class="k2">)</span>
<span class="number">  5</span>                  nTurn <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  6</span>               bTurn <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  7</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number">  8</span>             <span class="k1">case</span> <span class="n">1</span><span class="k2">:</span>
<span class="number">  9</span>               <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>bTurn<span class="k2">)</span>
<span class="number"> 10</span>                 nTurn <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 11</span>               bTurn <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 12</span>               <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 13</span>            <span class="k2">}</span> <span class="c">// end nTurn switch</span>
<span class="number"> 14</span>
<span class="number"> 15</span><span class="c">// could be shortened to </span>
<span class="number"> 16</span><span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>bTurn<span class="k2">)</span> <span class="k2">{</span>nturn <span class="k3">=</span> <span class="n">1</span> <span class="k3">+</span> <span class="k3">-</span>nTurn<span class="k2">;</span> bTurn <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
</div></div><p>
That&#39;s if it&#39;s an int. If it&#39;s a bool then you can use:<br /><span class="source-code"><span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>bTurn<span class="k2">)</span> <span class="k2">{</span>nTurn <span class="k3">=</span> <span class="k3">!</span>nTurn<span class="k2">;</span> bTurn <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span></span></p><p>No big deal, but I find it funny you didn&#39;t use a switch for the event types, but went with ifs. Then for something small with 2 choices you used a switch. Just a personal thing. <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /></p><p>---</p><p>One thing you could to to decrease processing time. Multiplcation is expensive. Avoid if necessary or do some precalculations. Add a few extra variables to Cards[] and store already calculated values.
</p><div class="source-code snippet"><div class="inner"><pre>        <span class="k1">if</span><span class="k2">(</span>nPos_x <span class="k3">&gt;</span><span class="k3">=</span> <span class="k2">(</span>Cards<span class="k2">[</span>count<span class="k2">]</span>.fTX<span class="k3">*</span>fPercent_Diff_WD<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> nPos_y <span class="k3">&gt;</span><span class="k3">=</span> <span class="k2">(</span>Cards<span class="k2">[</span>count<span class="k2">]</span>.fTY<span class="k3">*</span>fPercent_Diff_HT<span class="k2">)</span><span class="k2">)</span>
        <span class="k2">{</span>
           <span class="k1">if</span><span class="k2">(</span>nPos_x <span class="k3">&lt;</span><span class="k3">=</span> <span class="k2">(</span>Cards<span class="k2">[</span>count<span class="k2">]</span>.fBX<span class="k3">*</span>fPercent_Diff_WD<span class="k2">)</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> nPos_y <span class="k3">&lt;</span><span class="k3">=</span> <span class="k2">(</span>Cards<span class="k2">[</span>count<span class="k2">]</span>.fBY<span class="k3">*</span>fPercent_Diff_HT<span class="k2">)</span><span class="k2">)</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Thu, 11 Jul 2024 02:10:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>A good event loop is the basis of all allegro programs.</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">bool</span> quit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  2</span><span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>quit<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  5</span>   <span class="k1">if</span> <span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</span>      Draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</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">  8</span>      redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  9</span>   <span class="k2">}</span>
<span class="number"> 10</span>   <span class="k1">do</span> <span class="k2">{</span>
<span class="number"> 11</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"> 12</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>queue , <span class="k3">&amp;</span>ev<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</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="k2">{</span>
<span class="number"> 14</span>         redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 15</span>      <span class="k2">}</span>
<span class="number"> 16</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_MOUSE_AXES<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="k2">}</span>
<span class="number"> 20</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> ...<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 21</span>         
<span class="number"> 22</span>      <span class="k2">}</span>
<span class="number"> 23</span>   <span class="k2">}</span> <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</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>queue<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>   
<span class="number"> 25</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>
</div></div><p>

Really take it to heart, because when you don&#39;t follow a proper event loop you get all kinds of problems in your program like drawing lag and input lag.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 12 Jul 2024 21:23:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Daniel, I think the program has a larger issue.  I moved the draw command but it didn&#39;t help, maybe even increased the lag.  I&#39;ll dig deeper. </p><p>Edgar, I appreciate the insight.  I&#39;ll look into it.  I wouldn&#39;t dream of questioning someone who knows far more than I but someone on here stated part of my original issue was using if else.   They suggested using ifs only.  Does it really matter either way?   Thanks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Tue, 16 Jul 2024 01:45:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The only difference between if and else if is when you want to chain conditions.</p><p>Here both will execute.
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span>a<span class="k2">)</span> <span class="k2">{</span>

<span class="k2">}</span>
<span class="k1">if</span> <span class="k2">(</span>b<span class="k2">)</span> <span class="k2">{</span>

<span class="k2">}</span>
</pre></div></div><p>
</p><div class="source-code snippet"><div class="inner"><pre>Here the second is only triggered <span class="k1">if</span> <span class="k3">!</span>a is true.
<span class="k1">if</span> <span class="k2">(</span>a<span class="k2">)</span> <span class="k2">{</span>

<span class="k2">}</span>
<span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span>b<span class="k2">)</span> <span class="k2">{</span>

<span class="k2">}</span>
</pre></div></div><p>

if/else if/switch they&#39;re all the same pretty much, but the small differences are what separates them.</p><p>Premature optimization is not good. Even a decade old computer can handle millions of multiplications per second. You&#39;re not coming anywhere near a bottleneck in performance, so write the code the way it is easiest to understand.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 16 Jul 2024 19:59:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>All,</p><p>So, beating the program lag some more, I’ve run into a weird situation that doesn’t make sense to me.  I can accept and admit the flow isn’t the best.  I’m also sure if I restructured the program it might make my lag go away.   What I can’t understand is the reason for the lag based on the testing below.</p><p>Here is the short code.  </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">void</span> star_background<span class="k2">(</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">static</span> <span class="k1">int</span> y1 <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  4</span>    <span class="k1">static</span> <span class="k1">int</span> y2 <span class="k3">=</span> <span class="k3">-</span><span class="n">480</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</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>COLOR::BLACK<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>still, <span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>stars, <span class="n">0</span>,y1, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>stars, <span class="n">0</span>,y2, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>      y1<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 11</span>       y2<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 12</span>     <span class="k1">if</span><span class="k2">(</span>y1&gt;480<span class="k2">)</span>
<span class="number"> 13</span>        y1 <span class="k3">=</span><span class="k3">-</span><span class="n">480</span><span class="k2">;</span>
<span class="number"> 14</span>      <span class="k1">if</span><span class="k2">(</span>y2&gt;478<span class="k2">)</span>
<span class="number"> 15</span>           y2 <span class="k3">=</span> <span class="k3">-</span><span class="n">480</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="k2">}</span> <span class="c">// end of star_background</span>
</div></div><p>

If I comment out the Still command, my lag goes away.<br />If I uncomment the Still command and comment out stars (y1) my lag goes away.<br />If I uncomment the stars(y1) command and comment out stars (y2) my lag goes away.</p><p>It’s like having 3 bitmaps drawn is causing the lag.</p><p>If I leave the bitmap drawings and comment out the math, still lags<br />If I comment out all ref to y1 and y2, and use an actual number in place of y1 and y2.  I still have the lag.<br />If I put everything back to original and replace one of the stars with a different bitmap. So that I have 3 unique bitmaps.  I still have the lag.  <br />I replaced both bitmaps Stars and Still with smaller, different bitmaps, I still have the lag.</p><p>I’m not that stressed over it because I can do away with the Still bmp or I can rewrite a big section of code to clear the lag.  I was just curious if this made sense to anyone as to why this would happen?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Thu, 18 Jul 2024 23:20:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Nothing seems unusual in that bit of code. It has to be something else. Unless they are huge bitmaps or memory bitmaps.</p><p>Were they loaded/create before or after display?</p><p>I&#39;d like to see entire project if it&#39;s not too much to ask.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 19 Jul 2024 03:13:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Daniel, </p><p>I’ll pull the data together.  I tried one more test.  I got to thinking it may be computer specific.   So I ran the program on a faster machine.  The lag wasn’t as bad, but like the previous machine, the lag increased the longer I ran the program.   Both machines were running Windows.  The first was Win 10 and the second Win 11.  </p><p>I then compiled and ran the program on the second machine under Linux / Kubuntu.  It ran great.  So I’m not sure if it’s a Windows thing or poor programming.  Likely the latter. </p><p>I’ll work on the program files.</p><p>Do you know if this site allows compressed files?  Otherwise if will be about 10-15 small files.</p><p>** UPDATE ** Try to add files. Site doesn&#39;t seem to allow anything but text files.  Not sure how to get the pictures and ttf files to you.   Let me know if I&#39;ve missing something.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Fri, 19 Jul 2024 21:00:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Don&#39;t call display_print inside the if ev.type == ALLEGRO_EVENT_TIMER call. Just set redraw to true and use up the rest of the events like it shows above.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 20 Jul 2024 01:02:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks Edgar.  That&#39;s similar to Daniel&#39;s advice.  Can you explain reason for that?  Here is why I ask.  </p><p>ev.timer<br />{ <br />  display print<br />}</p><p>Vs </p><p>ev.timer <br />{  <br />  set bool variable to true<br />}</p><p>if(bool)<br /> { <br />   display print<br /> }</p><p>I&#39;m not seeing the difference. Every time in timer your going to see bool back to true and the next if condition will print.  I&#39;m not disagreeing, just asking for educational purposes.   Thanks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Sat, 20 Jul 2024 01:28:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>We&#39;ve mentioned it before, but you need to load bitmaps AFTER creating the display. </p><p>Order matters</p><p>If there is not display to connect the bitmaps to then they become memory bitmaps and not video bitmaps.</p><p>Memory bitmaps - memory stored on computer - slow drawing due to slow transfer to GPU<br />Video bitmaps - memory stored on the GPU - fast because it&#39;s already there</p><p>Options:<br />1. load after display<br />2. load before display but right after display is created you convert them to video bitmaps<br /><span class="source-code"><span class="k1">void</span> al_convert_memory_bitmaps<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></span></p><p>----</p><p>The drawing in the timer event is problematic. Look at bitmap.c (in the examples folder). It uses a refresh variable to set if drawing needs to occurs. Yes, timer sets it every tic. However, drawing is skipped if other events are already in the queue and needed to be processed. Your not skipping drawing. drawing should be last and only if everything is done since it takes the longest to process.</p><p>Mouse events, display events, ...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Sat, 20 Jul 2024 01:58:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="">AceBlkwell</a> said:</div><div class="quote"><p>


Thanks Edgar. That&#39;s similar to Daniel&#39;s advice. Can you explain reason for that? Here is why I ask.
</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>ev.timer
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>display print
<span class="number">  4</span><span class="k2">}</span>
<span class="number">  5</span>
<span class="number">  6</span>Vs
<span class="number">  7</span>
<span class="number">  8</span>ev.timer
<span class="number">  9</span><span class="k2">{</span>
<span class="number"> 10</span>set <span class="k1">bool</span> variable to <span class="k1">true</span>
<span class="number"> 11</span><span class="k2">}</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="k1">if</span><span class="k2">(</span><span class="k1">bool</span><span class="k2">)</span>
<span class="number"> 14</span><span class="k2">{</span>
<span class="number"> 15</span>display print
<span class="number"> 16</span><span class="k2">}</span>
</div></div><p>

I&#39;m not seeing the difference. Every time in timer your going to see bool back to true and the next if condition will print. I&#39;m not disagreeing, just asking for educational purposes. Thanks.
</p></div></div><p>
There&#39;s a big difference in a proper event loop that uses up all the events in the queue before performing a redraw. You&#39;re essentially getting backed up events in your queue that make it slower and slower because it&#39;s responding to timer events that happened in the past. It never catches up to the present.</p><p><img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sun, 21 Jul 2024 01:26:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks guys, I think it&#39;s starting to sink in.  I&#39;ll do some rearranging and see what happens.  I appreciate the insight.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Sun, 21 Jul 2024 04:26:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No problem. Let us know if our suggestions did anything to improve performance.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Tue, 23 Jul 2024 03:53:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I managed to run your program and did a few things to get rid of the lag (as suggested by the other guys):</p><p>Moved create display before bitmap creation in a_init():</p><div class="source-code snippet"><div class="inner"><pre>init_confirm<span class="k2">(</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="s">"allegro"</span><span class="k2">)</span><span class="k2">;</span>
init_confirm<span class="k2">(</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="s">"keyboard"</span><span class="k2">)</span><span class="k2">;</span>
init_confirm<span class="k2">(</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="s">"mouse"</span><span class="k2">)</span><span class="k2">;</span>
init_confirm<span class="k2">(</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="s">"font_addon"</span><span class="k2">)</span><span class="k2">;</span>
init_confirm<span class="k2">(</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="s">"ttf_addon"</span><span class="k2">)</span><span class="k2">;</span>
init_confirm<span class="k2">(</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="s">"primitives"</span><span class="k2">)</span><span class="k2">;</span>
init_confirm<span class="k2">(</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="s">"image addon"</span><span class="k2">)</span><span class="k2">;</span>

disp <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><span class="n">640</span>, <span class="n">480</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//BEFORE BITMAP CREATION!</span>
init_confirm<span class="k2">(</span>disp, <span class="s">"display"</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

And I added a redrawScreen bool to main, which gets set in the timer event:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span><span class="k2">(</span>event.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER<span class="k2">)</span>
<span class="k2">{</span>
    redrawScreen <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="k2">}</span> <span class="c">// end timer event check</span>
</pre></div></div><p>

Finally I added a new condition to the end of the while(!bQuite) loop:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">if</span> <span class="k2">(</span>redrawScreen<span class="k2">)</span>
<span class="k2">{</span>
    redrawScreen <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</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>COLOR::BLACK<span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>titlescr, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>target<span class="k2">)</span><span class="k2">;</span>                                     <span class="c">// have to return target bitmap to target or flipping wont work</span>
    <a href="http://www.allegro.cc/manual/al_draw_scaled_bitmap"><span class="a">al_draw_scaled_bitmap</span></a><span class="k2">(</span>buffer, <span class="n">0</span>, <span class="n">0</span>, nBufferWD, nBufferHT, <span class="n">0</span>, <span class="n">0</span>, nDispWD, nDispHT, <span class="n">0</span><span class="k2">)</span><span class="k2">;</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="k2">}</span>
</pre></div></div><p>


After those steps the lag was gone. Maybe a good starting point if you&#39;re still working on a fix.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Tue, 23 Jul 2024 21:11:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for taking the time you guys.  I&#39;ll work through the changes in the next few days so that I understand what is taking place.  I&#39;ll keep you updated. I appreciate you all looking at this with me. </p><p>** UPDATE **<br />I move the display creation before the before the bitmaps.  That solved the problem.  I&#39;m going to continue work on cleaning up the code. I&#39;m going to try using a redraw/bool approach as suggested.   Thanks again.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Tue, 23 Jul 2024 21:30:59 +0000</pubDate>
	</item>
</rss>
