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

Il GamePad

Utilizzare l'input del controller della XBOX
Utilizzare l'input del controller della XBOX
Link copiato negli appunti

Tramite il metodo statico GamePad.GetState possiamo leggere lo stato del GamePad dell'XBox 360. Essendo il GamePad dell'XBox 360 un normale controller USB, tale metodo di controllo non è riservato all'XBox 360 ma può essere sfruttato anche sotto Windows.

Il GamePad dell'XBox 360 è uno strumento di input molto potente, in quanto combina ben sei assi di input continuo e dodici bottoni per l'input discreto. In questo modo il GamePad può essere usato sia per rappresentare azioni istantanee (ad esempio "spara" con il tasto A) sia per azioni ad intensitá variabile (ad esempio "acceleratore" con il grilletto destro).

Figura 39. Il layout del GamePad
Il layout del GamePad

I grilletti ("triggers") e i bastoncini ("sticks") permettono tramite indici e pollici di fornire input continuo. I bottoni per l'input discreto sono quattro rivolti verso l'utente ("face buttons", A, B, X, Y), due posizionati sopra i grilletti ("bumpers") e due attivabili premendo gli sticks; inoltre il pad direzionale ("D-pad") permette di selezionare opzioni e indicare una tra quattro direzioni; i bottoni indietro ("back"), guida ("guide") e avvia ("start") sono posizionati in modo da essere meno accessibili e sono solitamente riservati per le fasi di gioco non di azione.

La struttura GamePadState ritornata dal metodo GamePad.GetState è cosí definita:

GamePadButtons Buttons { get; }

La struttura GamePadButtons espone i pulsanti premuti:

ButtonState A { get; }
ButtonState B { get; }
ButtonState Back { get; }
ButtonState BigButton { get; }
ButtonState LeftShoulder { get; }
ButtonState LeftStick { get; }
ButtonState RightShoulder { get; }
ButtonState RightStick { get; }
ButtonState Start { get; }
ButtonState X { get; }
ButtonState Y { get; }

Inoltre la struttura GamePadButtons espone i due metodi seguenti:

bool IsButtonDown(Buttons button);
bool IsButtonUp(Buttons button);

che ci permettono di verificare quali bottoni sono premuti (rilasciati). Tali metodi sono utili perché ci permettono di verificare la pressione di bottoni anche contemporaneamente con un OR logico (|) dei valori dell'enum Buttons, che rappresenta tutti i bottoni del GamePad (ed ha anche dei valori per rappresentare pressioni discretizzate dei thumbsticks):

public enum Buttons
{
    DPadUp = 1,
    DPadDown = 2,
    DPadLeft = 4,
    DPadRight = 8,
    Start = 16,
    Back = 32,
    LeftStick = 64,
    RightStick = 128,
    LeftShoulder = 256,
    RightShoulder = 512,
    BigButton = 2048,
    A = 4096,
    B = 8192,
    X = 16384,
    Y = 32768,
    LeftThumbstickLeft = 2097152,
    RightTrigger = 4194304,
    LeftTrigger = 8388608,
    RightThumbstickUp = 16777216,
    RightThumbstickDown = 33554432,
    RightThumbstickRight = 67108864,
    RightThumbstickLeft = 134217728,
    LeftThumbstickUp = 268435456,
    LeftThumbstickDown = 536870912,
    LeftThumbstickRight = 1073741824
}

La struttura espone anche:

GamePadDPad DPad { get; }

che permette di verificare quali direzioni del pad direzionale sono premute, in forma di una struttura (il GamePadDPad) che offre una proprietá per ciascuna direzione trattandola (giustamente) come un bottone:

ButtonState Down { get; }
ButtonState Left { get; }
ButtonState Right { get; }
ButtonState Up { get; }

GamePadState espone inoltre due proprietà:

GamePadThumbSticks ThumbSticks { get; }
GamePadTriggers Triggers { get; }

La prima contiene informazioni sugli sticks destro e sinistro; la struttura GamePadThumbSticks ritornata contiene due vettori che indicano quanto è inclinato lungo gli assi orizzontale e verticale il thumbstick in questione, con valori che vanno da -1 (sinistra/basso) a +1 (destra/alto):

Vector2 Left { get; }
Vector2 Right { get; }

La seconda proprietà, Triggers, contiene informazioni sui grilletti destro e sinistro, rappresentati nella struttura GamePadTriggers come due valori floating point:

float Left { get; }
float Right { get; }

l'ultima informazione che troviamo in un GamePad non è tanto una informazione circa il suo stato di input, ma quasi: tramite la proprietá

bool IsConnected { get; }

possiamo verificare se il controller è connesso o meno, ad esempio mettendo in gioco in pausa quando il controller è sconnesso perché il cavo potrebbe essere stato staccato accidentalmente o la batteria del controller wireless potrebbe essere scarica.

Ti consigliamo anche