<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Screen flipping varying speeds</title>
		<link>http://www.allegro.cc/forums/view/618894</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 01 Mar 2024 05:12:41 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>All,</p><p>I&#39;m playing around with getting a bitmap to scroll automatically. I&#39;ve got it working.  In short I draw a 640x480 bitmap at 0,0 and same bitmap at 0,-480.  I increase y until it gets to 480 and reset to -480. (give or take depending on actual picture size) It gives the appearance of a rolling picture.  I&#39;m using event timer to flip the screen.  At first, it works great. However, when I move the mouse over the screen area it speeds up.  It slows back down when the mouse is still.  Why would this be if the timer is dictating the flipping?</p><p>Be kind with the critiquing code below.  This was actually different trial I was working on and I altered to test my scrolling idea.  It&#39;s piece work and the variables probably don&#39;t make a lot of sense.  I wasn&#39;t going to include it but it&#39;s the first thing everyone asks about.  </p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span>argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span><span class="k1">bool</span> bQuit <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  4</span><span class="k1">int</span> pos_x <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>
<span class="number">  5</span><span class="k1">int</span> pos_y <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>
<span class="number">  6</span><span class="k1">int</span> y1 <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  7</span><span class="k1">int</span> y2 <span class="k3">=</span> <span class="k3">-</span><span class="n">478</span><span class="k2">;</span>
<span class="number">  8</span>a_init<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span><a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="k1">while</span><span class="k2">(</span><span class="k3">!</span>bQuit<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 12</span>
<span class="number"> 13</span>
<span class="number"> 14</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"> 15</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"> 16</span>
<span class="number"> 17</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>city, <span class="n">0</span>,y1, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>city, <span class="n">0</span>,y2, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>        y1<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 20</span>  y2<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 21</span>  <span class="k1">if</span><span class="k2">(</span>y1&gt;478<span class="k2">)</span>
<span class="number"> 22</span>        y1 <span class="k3">=</span><span class="k3">-</span><span class="n">478</span><span class="k2">;</span>
<span class="number"> 23</span>  <span class="k1">if</span><span class="k2">(</span>y2&gt;478<span class="k2">)</span>
<span class="number"> 24</span>        y2 <span class="k3">=</span> <span class="k3">-</span><span class="n">478</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</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"> 27</span>   <span class="k2">{</span>
<span class="number"> 28</span>   pos_y <span class="k3">=</span> event.mouse.y<span class="k2">;</span>
<span class="number"> 29</span>   pos_x <span class="k3">=</span> event.mouse.x<span class="k2">;</span>
<span class="number"> 30</span>   <span class="k2">}</span> <span class="c">// end mouse axis</span>
<span class="number"> 31</span>
<span class="number"> 32</span>    <span class="k1">else</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"> 33</span>      <span class="k2">{</span>
<span class="number"> 34</span>      bQuit <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 35</span>      <span class="k2">}</span>
<span class="number"> 36</span>    <span class="k1">else</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"> 37</span>  <span class="k2">{</span>
<span class="number"> 38</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"> 39</span>        <span class="k2">}</span>
<span class="number"> 40</span>
<span class="number"> 41</span><span class="k2">}</span><span class="c">// end game while loop</span>
<span class="number"> 42</span>
<span class="number"> 43</span><a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>disp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span><a href="http://www.allegro.cc/manual/al_destroy_event_queue"><span class="a">al_destroy_event_queue</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>
<span class="number"> 46</span><span class="k2">}</span> <span class="c">//end main</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Wed, 28 Feb 2024 04:05:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do not use else if with your events. If the first triggers, it will ignore all others.</p><p>also, where is the setup?</p><p>The part where you&#39;re changing y should be in the timer event section otherwise ANY EVENT will set it to change. If you want it consistent then you need timers.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Wed, 28 Feb 2024 04:10:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Also, you&#39;re drawing every loop, you may only be flipping in the timer, but because you&#39;re drawing every loop, any event will cause the draw.</p><p>Only draw/flip when the timer ticks (and take into account what Daniel said!)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Wed, 28 Feb 2024 15:02:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks all, </p><p>Makes sense, I&#39;ll try it out.  </p><p>The setup is in a separate file A5_init.cpp</p><p>I&#39;ll keep you posted.  I&#39;m sure I&#39;ll be back anyways <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=";D" border="0" />. </p><p>** UPDATE ** It worked like a charm.  I was even able to use</p><p> al_convert_mask_to_alpha(stars,COLOR::WHITE);</p><p>to use a stationary back ground as well.  Thanks again.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Wed, 28 Feb 2024 20:26:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The timer should control the logic, not the drawing. Drawing is a result of the logic.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Wed, 28 Feb 2024 23:18:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In this program there really isn&#39;t any logic.  Even the mouse event isn&#39;t needed.  It was just part of the previous trial program I was working on.  The program just updates screen and looks for the X to be clicked. Really the only condition checked for is, has the timer increased by another click.</p><p>I could move the actual drawing to it&#39;s own function then call the function from within the timer section, but for the sake of this &quot;see if this will work&quot; type program, I didn&#39;t see the need to get so structured. </p><p>I&#39;ve got a feeling I&#39;m misunderstanding what you are saying,.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AceBlkwell)</author>
		<pubDate>Fri, 01 Mar 2024 00:57:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The logic in this case would just be your xpos/ypos. That should be updated when the timer ticks, the idea being, no matter how fast the computer, things will always move at the same speed, because logic will only update when the timer ticks.</p><p>I’d love it if Daniel would post an example of his standard event/drawing loop, because his games always seem really smooth (but I may be hoping for too much!)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dizzy Egg)</author>
		<pubDate>Fri, 01 Mar 2024 02:59:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I don&#39;t &quot;wait&quot; for events, but run through them. As always, I have a standard &quot;framework&quot; of what my applications are based on. Also, added a TicTacToe game to boot.</p><p><a href="https://github.com/dlharmon911">My Discord</a></p><p>In main loop:<br />1. process input<br />2. do logic based on input (set dirty if need to redraw)<br />3. draw (if dirty)</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">int32_t</span> App::loop<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">while</span> <span class="k2">(</span><span class="k3">!</span>this-&gt;m_kill<span class="k2">)</span>
<span class="number">  4</span>  <span class="k2">{</span>
<span class="number">  5</span>    this-&gt;input<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>    <span class="k1">while</span> <span class="k2">(</span>this-&gt;m_counter <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number">  8</span>    <span class="k2">{</span>
<span class="number">  9</span>      this-&gt;logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>      <span class="k3">-</span><span class="k3">-</span>this-&gt;m_counter<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>this-&gt;m_dirty<span class="k2">)</span>
<span class="number"> 14</span>    <span class="k2">{</span>
<span class="number"> 15</span>      this-&gt;draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>      this-&gt;m_dirty <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 17</span>    <span class="k2">}</span>
<span class="number"> 18</span>
<span class="number"> 19</span>    <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">01</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>  <span class="k2">}</span>
<span class="number"> 21</span>
<span class="number"> 22</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 23</span><span class="k2">}</span>
<span class="number"> 24</span>
<span class="number"> 25</span><span class="k1">void</span> App::draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 26</span><span class="k2">{</span>
<span class="number"> 27</span>  <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">64</span>, <span class="n">0</span>, <span class="n">64</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>
<span class="number"> 30</span>
<span class="number"> 31</span>
<span class="number"> 32</span>
<span class="number"> 33</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"> 34</span><span class="k2">}</span>
<span class="number"> 35</span>
<span class="number"> 36</span><span class="k1">void</span> App::logic<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 37</span><span class="k2">{</span>
<span class="number"> 38</span><span class="k2">}</span>
<span class="number"> 39</span>
<span class="number"> 40</span><span class="k1">void</span> App::input<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 41</span><span class="k2">{</span>
<span class="number"> 42</span>  <span class="k1">static</span> <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number"> 43</span>
<span class="number"> 44</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>al_event_queue_is_empty<span class="k2">(</span>this-&gt;m_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 45</span>  <span class="k2">{</span>
<span class="number"> 46</span>    <a href="http://www.allegro.cc/manual/al_get_next_event"><span class="a">al_get_next_event</span></a><span class="k2">(</span>this-&gt;m_queue, <span class="k3">&amp;</span>event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>
<span class="number"> 48</span>    <span class="k1">switch</span> <span class="k2">(</span>event.type<span class="k2">)</span>
<span class="number"> 49</span>    <span class="k2">{</span>
<span class="number"> 50</span>    <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 51</span>    <span class="k2">{</span>
<span class="number"> 52</span>      <span class="k3">+</span><span class="k3">+</span>this-&gt;m_counter<span class="k2">;</span>
<span class="number"> 53</span>    <span class="k2">}</span> <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 54</span>
<span class="number"> 55</span>    <span class="k1">case</span> ALLEGRO_EVENT_DISPLAY_CLOSE:
<span class="number"> 56</span>    <span class="k2">{</span>
<span class="number"> 57</span>      this-&gt;m_kill <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 58</span>    <span class="k2">}</span> <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 59</span>    <span class="k2">}</span>
<span class="number"> 60</span>  <span class="k2">}</span>
<span class="number"> 61</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Fri, 01 Mar 2024 05:12:41 +0000</pubDate>
	</item>
</rss>
