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 prevGamePadState.IsButtonDown currGamePadState.IsButtonUp

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 modalità Portrait Game1.cs

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

Se ora premiamo il tasto Indietro (<-

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