Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Gestire dati e stato del device

Utilizzare le informazioni ricevute, gli oggetti necessari per memorizzare lo stato e visualizzare l'input
Utilizzare le informazioni ricevute, gli oggetti necessari per memorizzare lo stato e visualizzare l'input
Link copiato negli appunti

Una volta ottenuto l'input dalla periferica, vediamo come utilizzare le informazioni ricevute. A dire il vero, il nostro template di XNA per WP7 già include nel metodo Update del sorgente Game1.cs una forma semplificata di gestione del tasto di Indietro del nostro telefonino:

// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
  this.Exit();

Questo permette al gioco di uscire (this.Exit) qualora il bottone Indietro del controller principale risulti premuto (ButtonState.Pressed).

Proviamo a sostituire queste due righe di codice con qualcosa di un pò più "raffinato". Sostituiamo alle due righe di codice di cui sopra con le seguenti:

// Controlla se è stato premuto il pulsante di Back e,
// in caso affermativo, prepara il messaggio da mostrare a schermo
if (prevGamePadState.IsButtonDown(Buttons.Back) && currGamePadState.IsButtonUp(Buttons.Back))
  gamePadText = ("Last button pressed: Back");

Ecco una cosa interessante da notare. Leggere lo stato di una periferica (tastiera, gamepad o touchpanel che sia) spesso non è sufficiente per ottenere una buona gestione degli input. A volte è necessario anche considerare le attività compiute dall'utente subito prima o subito dopo un certo "evento" (in questo caso la pressione di un bottone sul gamepad). In questo caso, ad esempio, non ci limitiamo a richiedere che sia stato premuto il bottone di Back (prevGamePadState.IsButtonDown), ma anche che questo bottone sia stato effettivamente rilasciato dall'utente (currGamePadState.IsButtonUp). Se invece volessimo subordinare un'azione alla pressione del tasto (e non al suo rilascio), potremmo invertire la condizione nel modo seguente:

if (prevGamePadState.IsButtonUp(Buttons.Back) && currGamePadState.IsButtonDown(Buttons.Back))
  gamePadText = ("Last button pressed: Back");

Tracciare l'input sullo schermo

Prima di procedere oltre, aggiungiamo un font al nostro progetto per poter tracciare sullo schermo quanto accade a livello di input.

In Esplora soluzioni (Solution Explorer) Clicchiamo con il tasto destro sul progetto relativo al contenuto (NomeDelProgettoContent, es. SimpleInputManagerContent) e scegliamo Aggiungi > Nuovo elemento. Nel pannello che appare scegliamo Sprite Font e nominiamo il nuovo item semplicemente font.spritefont.

In questo modo abbiamo aggiunto un set di caratteri da utilizzare nel progetto. Volendo, possiamo cambiare il font e la grandezza semplicemente aprendo il file font.spritefont con visual studio e modificando uno o entrambi i seguenti tag (in questo caso, accertatevi però di usare un font installato sulla vostra macchina):

[...]
<FontName>Segoe UI Mono</FontName>
[...]
<Size>14</Size>
[...]

A livello di classe, dichiariamo un oggetto SpriteFont, aggiungendo la riga:

SpriteFont font;

Nel metodo LoadContent(), subito sotto spriteBatch aggiungiamo la seguente riga per importare all'interno del progetto principale il font aggiunto in precedenza:

[...]
   spriteBatch = new SpriteBatch(GraphicsDevice);
   font = Content.Load("font");

Ancora SpriteBatch

Adesso siamo pronti a scrivere a schermo le informazioni relative al gamePad. Nel metodo Draw sarà sufficiente aggiungere le seguenti righe:

[...]
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
// Scrive a schermo il testo utilizzando il font specificato,
// alla posizione X = 10, Y = 20, con caratteri di colore bianco
spriteBatch.DrawString(font, gamepadText, new Vector2(10, 20), Color.White);
spriteBatch.End();

Come visto in precedenza, SpriteBatch è la classe del framework che ci consente di disegnare immagini 2D. In particolare, il metodo Drawstring() si occupa di disegnare del testo sulla base di quattro parametri fondamentali:

  • il tipo di font da utilizzare (font)
  • il testo (gamepadText)
  • la posizione (in questo caso abbiamo collocato la scritta vicino allo spigolo in alto a sinistra)
  • il colore del testo (Color.White)

Come ogni operazione (o gruppo di operazioni) di disegno a video, anche questa deve essere compresa tra uno spriteBatch.Begin() e uno spriteBatch.End(). Se ora compiliamo, premendo F5, otterremo il seguente risultato:

Figura 27. Mostrare a video l'aquisizione dell'input

(clic per ingrandire)

Aggiungere  file al progetto

Questo è ciò che si ottiene lanciando l'applicazione (F5) e ruotando il device di 90°in senso antiorario. Per visualizzare l'applicazione in modalità Portrait (ossia in verticale), basta indicare all'emulatore di avviarsi in modalità Portrait e specificare le dimensioni dello schermo. Per farlo, aggiungiamo le seguenti righe nel costruttore di Game1.cs:

graphics.SupportedOrientations = DisplayOrientation.Portrait;
graphics.PreferredBackBufferWidth = 480;
graphics.PreferredBackBufferHeight = 800;

Se ora premiamo il tasto Indietro (<-) sull'emulatore, dovrebbe apparire il seguente messaggio:

Figura 28. Rilevata la pression del tasto 'Indietro'

(clic per ingrandire)

Rilevata la pression del tasto 'Indietro'

Non è un granché: c'è un solo bottone da premere. Proviamo a renderlo un pò più interessante, aggiungendo la gestione del touchPanel.

Ti consigliamo anche