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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Gestire il colore CSS con HWB
Escludere alcuni file da GitHub Secret Scanning
Eseguire query in contemporanea con EF
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Creare una libreria CSS universale: i bottoni
Utilizzare QuickGrid di Blazor con Entity Framework
Introduzione alle Container Queries
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
I più letti di oggi
- Parallelizzare le chiamate HTTP con async/await e le Promise in JavaScript
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Eseguire una chiamata AJAX per inviare dati al server in Angular 2
- Comporre la pagina HTML con i nuovi tag semantici di HTML5
- Simulare della latenza con il pattern async/await