In questo capitolo vedremo come gestire l'input dell'utente. In particolare analizzeremo come leggere i due tipi di input:
- input basato su polling (tastiera, mouse, tocco e gamepad dell'XBox 360)
- input basato su eventi (accelerometro)
Vedremo poi come costruire componenti che traducono il polling in eventi o gli eventi in polling, e faremo un esempio su come gestire le combo e le sequenze di input.
Lettura dell'input con polling
Nel metodo Update
leggiamo lo stato di un dispositivo con il metodo statico GetState della classe che rappresenta il dispositivo:
var kb = Keyboard.GetState(); // Keyboard.GetState(PlayerIndex.One);
var ms = Mouse.GetState();
var gp = GamePad.GetState(PlayerIndex.One);
Keyboard e Mouse si leggono con un semplice GetState, mentre GamePad richiede l'indice del giocatore in caso ci fosse più di un gamepad connesso alla stessa XBox (che ne supporta un massimo di 4). Se vogliamo leggere l'input del tastierino connesso a ciascun GamePad, possiamo farlo invocando l'overload GetState
della classe Keyboard
che prende il PlayerIndex
che denota il GamePad
a cui siamo interessati.
Stato della Tastiera
Il metodo Keyboard.GetState ci ritorna lo stato della tastiera nell'istante dell'invocazione. Possiamo scoprire tramite questo metodo quali sono i tasti premuti, sia uno ad uno che tutti insieme:
KeyState this[Keys key] { get; }
Per leggere lo stato di un tasto, useremo il codice seguente:
var space = Keyboard.GetState()[Keys.Space]; // Keyboard.GetState(PlayerIndex.One);
if(space == KeyState.Up)
...
Naturalmente KeyState
ha due soli valori: Up e Down, per rappresentare rispettivamente un tasto rilasciato e premuto.
È possibile leggere, tramite GetPressedKeys, l'insieme dei tasti premuti. Il risultato sarà un array di Keys
Keys[] GetPressedKeys();
Sono disponibili anche due metodi per controllare lo stato di un singolo tasto
Metodo | Descrizione |
---|---|
bool IsKeyDown(Keys key); |
ritorna true se il tasto passato in input è premuto |
bool IsKeyUp(Keys key); |
ritorna false se il tasto passato in input è premuto |
I tasti supportati sono quelli rappresentabili con l'enum Keys
. L'elenco è molto lungo, ma i tasti principali sono:
Tasti speciali | Caratteri alfanumerici | Tasti funzione | Tasti media player e tastiere rare |
---|---|---|---|
None = 0, Back = 8, Tab = 9, Enter = 13, Pause = 19, CapsLock = 20, Escape = 27, Space = 32, PageUp = 33, PageDown = 34, End = 35, Home = 36, Left = 37, Up = 38, Right = 39, Down = 40, PrintScreen = 44, Insert = 45, Delete = 46, LeftShift = 160, RightShift = 161, LeftControl = 162, RightControl = 163, LeftAlt = 164, RightAlt = 165, |
D0 = 48, D1 = 49, D2 = 50, D3 = 51, D4 = 52, D5 = 53, D6 = 54, D7 = 55, D8 = 56, D9 = 57, A = 65, B = 66, C = 67, D = 68, E = 69, F = 70, G = 71, H = 72, I = 73, J = 74, K = 75, L = 76, M = 77, N = 78, O = 79, P = 80, Q = 81, R = 82, S = 83, T = 84, U = 85, V = 86, W = 87, X = 88, Y = 89, Z = 90, NumPad0 = 96, NumPad1 = 97, NumPad2 = 98, NumPad3 = 99, NumPad4 = 100, NumPad5 = 101, NumPad6 = 102, NumPad7 = 103, NumPad8 = 104, NumPad9 = 105, Multiply = 106, |
F1 = 112, F2 = 113, F3 = 114, F4 = 115, F5 = 116, F6 = 117, F7 = 118, F8 = 119, F9 = 120, F10 = 121, F11 = 122, F12 = 123, F13 = 124, F14 = 125, F15 = 126, F16 = 127, F17 = 128, F18 = 129, F19 = 130, F20 = 131, F21 = 132, F22 = 133, F23 = 134, F24 = 135, |
Play = 250, Zoom = 251, |
L'elenco completo (leggermente più lungo) si può consultarlo su msdn.