Utilizzare il controller di Xbox nella Universal Windows Platform

di Matteo Tumiati, in Windows 10,

Le applicazioni della Universal Windows Platform, come già spiegato in diversi script e articoli, sono davvero universali e possono girare sia in ambiente Desktop tanto quanto direttamente all'interno di Xbox.

Nell'ambito della console, l'esperienza d'uso è molto diversa rispetto al PC, in quanto si preferisce fare uso di un controller o di un telecomando dedicato. Proprio per questo motivo, sono state aggiunte una serie di API sotto il namespace Windows.Gaming.Input, accessibili anche da Desktop, per supportare questo nuovo tipo di input: il controller (o gamepad) infatti, è un dispositivo primario e va gestito in modo adeguato, per essere al pari di mouse e tastiera.

Il controller può essere utilizzato per i seguenti scopi:

  • Analisi dei pulsanti premuti per intraprendere azioni ad-hoc;
  • Focus e interazione durante la navigazione: particolarmente importante su Xbox per dare un feedback visivo (dato che il campo è maggiore) sugli elementi selezionati (ad esempio, un bordo colorato su un pulsante è comodo per capire se il controllo è in focus oppure no);
  • Modalità mouse: scenario più avanzato del precedente, in cui c'è bisogno di maggior controllo e precisione sui movimenti.

Fornendo qualche esempio di codice, è possibile registrarsi agli eventi GamepadAdded e GamepadRemoved per capire quando il controller è stato aggiunto oppure rimosso e, di conseguenza, si possono recuperare alcune informazioni riguardo al suo stato (ad esempio, la batteria):

Gamepad.GamepadAdded += GamepadChanged;
Gamepad.GamepadRemoved += GamepadChanged;

private void GamepadChanged(object sender, Gamepad e)
{
    if (Gamepad.Gamepads.Count == 0)
    {
        Status.Text = "Gamedpad disconnesso";
        return;
    }

    Status.Text = "Gamepad connesso";

    var controller = Gamepad.Gamepads.FirstOrDefault();
    var batteryReport = controller.TryGetBatteryReport();
    BatteryStatus.Text = batteryReport.Status;
}

Eventualmente è anche possibile leggere i valori correnti dei pulsanti premuti:

while (true)
{
    var reading = controller.GetCurrentReading();
    LeftTrigger.Text = reading.LeftTrigger; 

    if (reading.Buttons.HasFlag(GamepadButtons.A))
    {
        PadA.Text = "Cliccato il pulsante A!";
    }

    await Task.Delay(TimeSpan.FromMilliseconds(5));
}

In questo esempio specifico, si è costruito un loop infinito per leggere i valori dei pulsanti premuti ogni 5 millisecondi. Il valore del trigger sinistro è un valore compreso tra 0 e 1 che sta ad indicare il livello di forza applicata, mentre HasFlag indica semplicemente con un valore booleano se il pulsante "A" è stato premuto oppure no.

L'elenco completo dei pulsanti è disponibile all'interno di questa immagine:

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi