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:
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 (<-
Non è un granché: c'è un solo bottone da premere. Proviamo a renderlo un pò più interessante, aggiungendo la gestione del touchPanel