Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 23 di 53
  • livello principiante
Indice lezioni

Input con polling - La tastiera

Gestire l'input dell'utente dalla tastiera
Gestire l'input dell'utente dalla tastiera
Link copiato negli appunti

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.

Ti consigliamo anche