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
Escludere alcuni file da GitHub Secret Scanning
Eseguire i worklow di GitHub su runner potenziati
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Selettore CSS :has() e i suoi casi d'uso avanzati
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Gestione CSS in Blazor con .NET 9
Creare un webhook in Azure DevOps
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Gestione degli stili CSS con le regole @layer