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
Gestione dell'annidamento delle regole dei layer in CSS
Eseguire i worklow di GitHub su runner potenziati
Utilizzare gRPC su App Service di Azure
Utilizzare QuickGrid di Blazor con Entity Framework
Utilizzare un service principal per accedere a Azure Container Registry
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Utilizzare Azure Cosmos DB con i vettori
Eseguire query verso tipi non mappati in Entity Framework Core
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
I più letti di oggi
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Accedere con ASP.NET ad un documento XML creato dall'oggetto recordset di ADO e ASP
- Richiamare programmaticamente le operazioni di aggiornamento, eliminazione e inserimento di FormView, DetailsView e GridView
- Ricavare lo spazio occupato su disco dal nostro sito
- Realizzare siti sicuri con ASP.NET Web Pages