<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>How to read if the key is pressed? keypressed()? Reason:Sprites.</title>
		<link>http://www.allegro.cc/forums/view/604691</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 25 Jul 2010 22:31:02 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hi everyone. I was reading Allegro reference, i have found a function called keypressed(). However, you put in a concrete key inside.</p><p>I have also tried using while operators, but the texture just went invisible, when you press a key (movement key). So... I have no good ideas anymore.</p><p>That is basically for drawing a steady sprite, when the character is not moving (when key is not being hold down).</p><p>Hope i explained it well.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (newn01)</author>
		<pubDate>Sun, 25 Jul 2010 03:29:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/604691/876666#target">newn01</a> said:</div><div class="quote"><p>Hope i explained it well.</p></div></div><p>
No, not really. <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /></p><p>I don&#39;t understand the specific issue but in general it seems like part of the problem is that you don&#39;t have much separation between your input-getting code, your logic processing code, and your drawing code... which is usually not a good thing.</p><p>All you&#39;d really have to do is store the sprite&#39;s coordinates in variables and draw it at those locations every frame, and only change them when you&#39;re pressing a key. Does that help? Sorry, I&#39;m not sure what you&#39;re asking.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (amber)</author>
		<pubDate>Sun, 25 Jul 2010 04:56:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, sorry. Let me try to explain:</p><p>Yea, i need something like you said: draw sprites only when key is being pressed. Being hold down. When you release the key, i want the character to stay. Not to drawn the sprites. And all i found is keypressed command, in which you cannot tell which key is being pressed. Also, if you do this:</p><div class="source-code snippet"><div class="inner"><pre>    <span class="k1">if</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> TRUE<span class="k2">)</span>
    <span class="k2">{</span>
    up<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    down<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    left<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    right<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
    <span class="k2">}</span>
</pre></div></div><p>

It just reacts before you press any key. After that it counts as true, even if you are not pressing any keys. And you cannot declared it as FALSE, because keypressed() = FALSE doesn&#39;t work. :/
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (newn01)</author>
		<pubDate>Sun, 25 Jul 2010 05:47:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can use either <span class="source-code"><a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span></span> or <span class="source-code"><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>...<span class="k2">]</span></span> to check for key presses.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sun, 25 Jul 2010 05:54:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Use <span class="source-code"><a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span></span> to read it, otherwise it will continue to return true. And don&#39;t mix the <span class="source-code"><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span><span class="k2">]</span></span> array with the <span class="source-code"><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span><a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span></span> APIs, because they serve two different purposes (keyboard state, vs key events).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Sun, 25 Jul 2010 06:04:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Okay, and what about those ascii codes? I couldn&#39;t find any on the google of arrow keys...</p><p>And for scancodes, i don&#39;t even heard about such.</p><p>There are commands from them to chars. But to them from chars - nop. :/</p><p>And you cannot use readkey(); with normal codes like KEY_UP. :/
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (newn01)</author>
		<pubDate>Sun, 25 Jul 2010 06:27:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/604691/876688#target">newn01</a> said:</div><div class="quote"><p> Okay, and what about those ascii codes? I couldn&#39;t find any on the google of arrow keys...</p></div></div><p>That&#39;s because ASCII has nothing to do with mapping a code to a key; it only maps codes to characters.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p> And you cannot use readkey(); with normal codes like KEY_UP</p></div></div><p>Yes you can.  The manual entry for <span class="source-code"><a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span></span> even shows you how to.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Sun, 25 Jul 2010 10:53:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/604691/876666#target">newn01</a> said:</div><div class="quote"><p>
I have also tried using while operators, but the texture just went invisible, when you press a key (movement key). So... I have no good ideas anymore.
</p></div></div><p>
A few things.<br />1. <span class="source-code"><span class="k1">while</span></span> is not an operator, it&#39;s a program flow control construct.<br />2. You didn&#39;t provide any code. As a rule of thumb, try to reduce the problem you&#39;re experiencing to 10 to 100 lines of code (ideally a code sample that still compiles and runs by itself). If you manage to come up with 10 lines of code demonstrating the problem, people <i>will</i> find it, and they <i>will</i> tell you how to fix it.<br />3. From what you&#39;re telling, I can only guess, but I bet you don&#39;t know how to set up the basic program structure for a game (any game). The very least you need is a main loop with timing, and three functions for the things happening in the main loop: input, logic, drawing. Flesh this out first - the general idea is that the input function reads input (keys, joystick, mouse) and stores the result somewhere; the logic then picks up the input, and updates the game&#39;s state (where things are, who is alive and who is not, which objects collide and what to do about it, etc.); the drawing function finally reads the game state and uses it to draw a frame. If you have anything like this in your code:
</p><div class="source-code snippet"><div class="inner"><pre><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_UP<span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
  <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, player, player_x, player_y <span class="k3">-</span> <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
...then you&#39;re doing it wrong.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Sun, 25 Jul 2010 16:30:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Direct C+P of the main.cpp file of my physics engine practice program.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include "map.h"</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="k1">int</span> s <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="k1">void</span> inc<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">void</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  8</span><span class="k2">{</span>
<span class="number">  9</span>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>  <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">24</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>  <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_SAFE, <span class="n">360</span>, <span class="n">270</span>, <span class="n">0</span>, <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/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>  <span class="c">//*****************************</span>
<span class="number"> 14</span>  <span class="c">//****Character Declaration****</span>
<span class="number"> 15</span>  <span class="c">//*****************************</span>
<span class="number"> 16</span>  character rei<span class="k2">;</span>
<span class="number"> 17</span>  <span class="c">//***********************</span>
<span class="number"> 18</span>  <span class="c">//****Map Declaration****</span>
<span class="number"> 19</span>  <span class="c">//***********************</span>
<span class="number"> 20</span>  MAP level<span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span><span class="k2">)</span> <span class="c">//This is the main game loop</span>
<span class="number"> 23</span>  <span class="k2">{</span>
<span class="number"> 24</span>    <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> <span class="c">//needed</span>
<span class="number"> 25</span>
<span class="number"> 26</span>    <span class="c">//Move.</span>
<span class="number"> 27</span>    <span class="c">//Check dash?</span>
<span class="number"> 28</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_C<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> rei.candash<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="c">//input</span>
<span class="number"> 29</span>      rei.dash<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//logic</span>
<span class="number"> 30</span>    <span class="k1">if</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_C<span class="k2">]</span><span class="k2">)</span> <span class="c">//input</span>
<span class="number"> 31</span>      rei.dash<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//logic</span>
<span class="number"> 32</span>
<span class="number"> 33</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span> rei.moveR<span class="k2">(</span>s<span class="k2">)</span><span class="k2">;</span> <span class="c">//input + logic</span>
<span class="number"> 34</span>    <span class="k1">else</span> <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span><span class="k2">)</span> rei.moveL<span class="k2">(</span>s<span class="k2">)</span><span class="k2">;</span> <span class="c">//input + logic</span>
<span class="number"> 35</span>    <span class="k1">else</span> rei.standspr<span class="k2">(</span>s<span class="k2">)</span><span class="k2">;</span> <span class="c">//input + logic</span>
<span class="number"> 36</span>
<span class="number"> 37</span>    <span class="c">//jump?</span>
<span class="number"> 38</span>    <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> rei.can_jump<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="c">//input</span>
<span class="number"> 39</span>    <span class="k2">{</span>
<span class="number"> 40</span>      rei.jump<span class="k2">(</span>s<span class="k2">)</span><span class="k2">;</span> <span class="c">//logic</span>
<span class="number"> 41</span>      rei.setjump<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>    <span class="k2">}</span>
<span class="number"> 43</span>    <span class="k1">if</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_UP<span class="k2">]</span><span class="k2">)</span> <span class="c">//input</span>
<span class="number"> 44</span>      rei.setjump<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//logic</span>
<span class="number"> 45</span>
<span class="number"> 46</span>    rei.go<span class="k2">(</span>s<span class="k2">)</span><span class="k2">;</span> <span class="c">// logic</span>
<span class="number"> 47</span>    level.check_all_cols<span class="k2">(</span><span class="k3">&amp;</span>rei<span class="k2">)</span><span class="k2">;</span> <span class="c">//collision checking (logic)</span>
<span class="number"> 48</span>
<span class="number"> 49</span>    <a href="http://www.allegro.cc/manual/acquire_screen" target="_blank"><span class="a">acquire_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//now all of this is drawing</span>
<span class="number"> 50</span>    <span class="c">//Clear previous screen</span>
<span class="number"> 51</span>    <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">360</span>, <span class="n">270</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span>    <span class="c">//draw map</span>
<span class="number"> 53</span>    level.draw<span class="k2">(</span>rei.getx<span class="k2">(</span><span class="k2">)</span>, rei.gety<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 54</span>    <span class="c">//draw sprite</span>
<span class="number"> 55</span>    <a href="http://www.allegro.cc/manual/draw_sprite" target="_blank"><span class="a">draw_sprite</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, rei.getsprite<span class="k2">(</span><span class="k2">)</span>, rei.getdispx<span class="k2">(</span><span class="k2">)</span>, rei.getdispy<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 56</span>    <a href="http://www.allegro.cc/manual/release_screen" target="_blank"><span class="a">release_screen</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>    inc<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// Increment.</span>
<span class="number"> 58</span>  <span class="k2">}</span>
<span class="number"> 59</span>
<span class="number"> 60</span>  <span class="c">//end.</span>
<span class="number"> 61</span>  <a href="http://www.allegro.cc/manual/allegro_exit" target="_blank"><span class="a">allegro_exit</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 62</span>
<span class="number"> 63</span><span class="k2">}</span>   
<span class="number"> 64</span><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 65</span>
<span class="number"> 66</span><span class="k1">void</span> inc<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 67</span><span class="k2">{</span>
<span class="number"> 68</span>  <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">10</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 69</span>  s<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 70</span><span class="k2">}</span>
</div></div><p>


It&#39;s very messy and unprofessional because it is just a test - I would normally have a game class, which in turn would contain a massive amount of information (an array of characters/creatures that would all run their &quot;go&quot; functions sequentially).</p><p>The moveR, moveL, jump, etc. functions do not actually do anything to the screen, all they do is change Rei&#39;s (the main character&#39;s) velocity in the appropriate direction. </p><p>Then, when I get to &quot;go&quot;, Rei actually moves; I take her velocities and add them to her x and y position. Then I check collisions to make sure I haven&#39;t moved her into any invalid places, and if I have, I put her back where she belongs (at the edge of the wall or on the top of the floor, etc). </p><p>Only after all of that is done do I bother drawing sprites.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kayle OTS)</author>
		<pubDate>Sun, 25 Jul 2010 22:31:02 +0000</pubDate>
	</item>
</rss>
