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
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati
Utilizzare database e servizi con gli add-on di Container App
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Utilizzare le collection expression in C#
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
.NET Conference Italia 2023
Filtrare e rimuovere gli elementi dalla cache del browser tramite le API JavaScript
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Disabilitare automaticamente un workflow di GitHub (parte 2)
Evitare il flickering dei componenti nel prerender di Blazor 8
I più letti di oggi
- Utilizzare WebAssembly con .NET, ovunque
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Utilizzare il trigger SQL con le Azure Function
- Ottimizzazione dei block template in Angular 17
- Disabilitare automaticamente un workflow di GitHub (parte 2)