Pri tvorbe počítačovej hry je jednou z dôležitých častí spracovanie vstupu od užívateľa. Keby sme ho totiž nespracovávali, nejednalo by sa o počítačovú hru, ale o film. Ak si odmyslíme špeciálny hardware ako volanty a snímače polohy, vstup sa deje tromi štandardnými cestami -- cez klávesnicu, cez myš alebo cez joystick. O zisťovaní polohy myši sme už hovorili minule. V tejto lekcii sa budeme venovať klávesnici. RUDL vie pristupovať ku klávesnici dvoma rôznymi spôsobmi. Cez ten prvý sa dá zistiť okamžitý stav, ktoré klávesy sú stlačené a ktoré nie. Niekedy to môže byť užitočné, ale napr. pre kláves na streľbu to asi nepoužijete, pretože by sa mohlo napríklad stať, že užívateľ stlačí aj pustí klávesu práve vtedy, keď niečo zisťujete, počítate alebo kreslíte, takže program si to vôbec nevšimne. To užívateľov väčšinou naštve. Celkovo sa tento spôsob používa hlavne pri jednoduchých a rýchlych príkladoch, kde na tom až tak nezáleží. *Keď sa druhý prístup urobí dobre, dosiahnete výhody tohto spôsobu, ale bez jeho nevýhod.* (Ako to spraviť ukážem v dodatkoch.) Na zisťovanie, či je stlačená kláves, môžete použiť Key.pressed?[K_NIEČO]. (Zoznam K_ konštánt je v dodatkoch.) Druhý prístup je cez udalosti. Pri udalostiach sa to všetko pekne ukladá do fronty a všetko si všimnete. Má to drobný problém - existuje udalosť "stlačená klávesa" aj "pustená klávesa", ale nie "držím klávesu". Nebolo by dobré, keby vždy, keď sa má hlavný hrdina čo i len o kúsok pohnúť, treba stlačiť a pustiť šípku. To užívateľov väčšinou naštve. Na zisťovanie, kedy sa kláves stlačí alebo pustí, môžete použiť udalosti KeyUpEvent a KeyDownEvent. Majú atribúty key, čo je príslušné K_NIEČO stlačeného klávesu, mod, čo je bitmask aktívnych modifikátorov (to sú tie veci ako Ctrl, Alt a Meta), a unicode, čo je ASCII-kód (teda vlastne Unicode-kód) znaku toho klávesu. Takže prvý, okamžitý prístup použijete pri spracovaní kláves, ktoré sa väčšinou držia dlho a nezáleží príliš na tom, kedy sa stlačia a kedy sa pustia. Druhý použijete pri spracovaní kláves, ktoré sú okamžité (napr. stlačenie Esc). h3. Dodatky K_UNKNOWN, K_FIRST, K_BACKSPACE, K_TAB, K_CLEAR, K_RETURN, K_PAUSE, K_ESCAPE, K_SPACE, K_EXCLAIM, K_QUOTEDBL, K_HASH, K_DOLLAR, K_AMPERSAND, K_QUOTE, K_LEFTPAREN, K_RIGHTPAREN, K_ASTERISK, K_PLUS, K_COMMA, K_MINUS, K_PERIOD, K_SLASH, K_0, K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, K_COLON, K_SEMICOLON, K_LESS, K_EQUALS, K_GREATER, K_QUESTION, K_AT, K_LEFTBRACKET, K_BACKSLASH, K_RIGHTBRACKET, K_CARET, K_UNDERSCORE, K_BACKQUOTE, K_a, K_b, K_c, K_d, K_e, K_f, K_g, K_h, K_i, K_j, K_k, K_l, K_m, K_n, K_o, K_p, K_q, K_r, K_s, K_t, K_u, K_v, K_w, K_x, K_y, K_z, K_DELETE, K_KP0, K_KP1, K_KP2, K_KP3, K_KP4, K_KP5, K_KP6, K_KP7, K_KP8, K_KP9, K_KP_PERIOD, K_KP_DIVIDE, K_KP_MULTIPLY, K_KP_MINUS, K_KP_PLUS, K_KP_ENTER, K_KP_EQUALS, K_UP, K_DOWN, K_RIGHT, K_LEFT, K_INSERT, K_HOME, K_END, K_PAGEUP, K_PAGEDOWN, K_F1, K_F2, K_F3, K_F4, K_F5, K_F6, K_F7, K_F8, K_F9, K_F10, K_F11, K_F12, K_F13, K_F14, K_F15, , K_NUMLOCK, K_CAPSLOCK, K_SCROLLOCK, K_RSHIFT, K_LSHIFT, K_RCTRL, K_LCTRL, K_RALT, K_LALT, K_RMETA, K_LMETA, K_LSUPER, K_RSUPER, K_MODE, K_HELP, K_PRINT, K_SYSREQ, K_BREAK, K_MENU, K_POWER, K_EURO, K_LAST KMOD_NONE, KMOD_LSHIFT, KMOD_RSHIFT, KMOD_LCTRL, KMOD_RCTRL, KMOD_LALT, KMOD_RALT, KMOD_LMETA, KMOD_RMETA, KMOD_NUM, KMOD_CAPS, KMOD_MODE, KMOD_CTRL, KMOD_SHIFT, KMOD_ALT, KMOD_META