<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Cant control key rate</title>
		<link>http://www.allegro.cc/forums/view/585898</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 14 Jun 2006 01:52:35 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have a problem. I&#39;m using P to pause my game but the user has to have lightning skills not to have the keyboard read multiple presses. Basically, its hard to pause the game because the input is so fast.</p><p>I tried set_keyboard_rate(0,0); and it still refreshes just as fast.</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> Playing_Input<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span> </td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td>  <span class="c">// R - Reset the ball. This is DEBUG</span></td></tr><tr><td class="number">5</td><td>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_R<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k3">!</span>Paused<span class="k2">)</span></td></tr><tr><td class="number">6</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">7</td><td>    BallX <span class="k3">=</span> <span class="n">300</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>    BallY <span class="k3">=</span> <span class="n">400</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    BallSpeedX <span class="k3">=</span> BallSpeedY <span class="k3">=</span> <span class="n">1</span>.<span class="n">5</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>    MoveLeft <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    MoveDown <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">13</td><td>  <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_P<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">14</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">15</td><td>    <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>Paused<span class="k2">)</span></td></tr><tr><td class="number">16</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">17</td><td>      PausedMouseX <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>      PausedMouseY <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">20</td><td>    <span class="k1">if</span><span class="k2">(</span>Paused<span class="k2">)</span></td></tr><tr><td class="number">21</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">22</td><td>      <a href="http://www.allegro.cc/manual/position_mouse" target="_blank"><span class="a">position_mouse</span></a><span class="k2">(</span>PausedMouseX, PausedMouseY<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td>    Paused <span class="k3">=</span> <span class="k3">!</span>Paused<span class="k2">;</span> <span class="c">//herin lies the problem, happens too fast</span></td></tr><tr><td class="number">26</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td>  <span class="c">// Clear the key buffer.</span></td></tr><tr><td class="number">29</td><td>  <a href="http://www.allegro.cc/manual/clear_keybuf" target="_blank"><span class="a">clear_keybuf</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

Ive tried creating a static variable to snapshot the current time, then compare the snapshotted time to the newest current time, but it doesn&#39;t seem to work as my timer counts to 240 and resets. Am I using the wrong functions here to get input? Honestly, if allegro had some way to just check for Key UP, it&#39;d be easy. Every other library I&#39;ve worked with has had keyup and keydown checks, and I&#39;ve used keyup when I don&#39;t want the action repeating.</p><p>Edit: I guess I should show this too:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">// The main loop for the playing state. Run until the user hits ESC.</span></td></tr><tr><td class="number">2</td><td>  <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span></td></tr><tr><td class="number">3</td><td>  <span class="k2">{</span></td></tr><tr><td class="number">4</td><td>    <span class="c">// Run the "logic" portion of the playing state while our main</span></td></tr><tr><td class="number">5</td><td>    <span class="c">// timer is 1. At the end it will be reset to 0. Allegro will</span></td></tr><tr><td class="number">6</td><td>    <span class="c">// manage the timer incrementing.</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">while</span><span class="k2">(</span>gMainTimer <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">8</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>      <span class="c">// Get input, check for collisions, and update each object.</span></td></tr><tr><td class="number">10</td><td>      Playing_Input<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>      <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>Paused<span class="k2">)</span></td></tr><tr><td class="number">12</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">13</td><td>        Playing_Collision<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        Playing_Update<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">16</td><td>      gMainTimer--<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>    <span class="c">// Render everything.</span></td></tr><tr><td class="number">20</td><td>    Playing_Render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  <span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (cpayette)</author>
		<pubDate>Wed, 14 Jun 2006 00:05:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I tried set_keyboard_rate(0,0); and it still refreshes just as fast.
</p></div></div><p>
That only affects buffered input (i.e. keypresses read with readkey()/ureadkey()).</p><p>Anyway:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> do_input_stuff<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="k2">{</span>
 <span class="k1">static</span> <span class="k1">int</span> repeat_counter <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>

 <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_FOO<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span>repeat_counter <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
    do_stuff<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    repeat_counter <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>
   <span class="k2">}</span>

 <span class="k1">if</span> <span class="k2">(</span>repeat_counter <span class="k3">&gt;</span> <span class="n">10</span><span class="k2">)</span>
    repeat_counter--<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

Or see <a href="http://www.allegro.cc/forums/thread/585162/585163#target">this thread</a>.</p><p>[EDIT]Fixed the code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Wed, 14 Jun 2006 00:19:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Awesome that helped a lot. I came close to that but couldn&#39;t quite get it. FYI, in case this post helps anyone else, make sure you do this:</p><p>if(repeat_counter &gt; 0)<br />  repeat_counter--;</p><p>Thanks again!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (cpayette)</author>
		<pubDate>Wed, 14 Jun 2006 00:35:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ah, yes. The dangers of typing example code directly into the code box. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Wed, 14 Jun 2006 01:52:35 +0000</pubDate>
	</item>
</rss>
