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
Utilizzare la libreria Benchmark.NET per misurare le performance
Monitorare i server on-premises con Azure Arc
Sostituire la GitHub Action di login su private registry
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
Eseguire una query su SQL Azure tramite un workflow di GitHub
Creare form tipizzati con Angular
Installare le Web App site extension tramite una pipeline di Azure DevOps
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Utilizzare politiche di resiliency con Azure Container App
Usare il versioning con i controller di ASP.NET Core Web API
Controllare gli accessi IP alle app con Azure Container Apps