Diamo adesso un’occhiata alle variabili membro della nostra classe:
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Queste sono di fatto il cuore gestionale del nostro gioco. La prima ci permette di gestire fisicamente le caratteristiche della nostra interfaccia con la scheda video, la seconda ci permette fisicamente di disegnare qualcosa sullo schermo. Vediamo come vengono inizializzate.
Il gestore dell’interfaccia grafica viene istanziato all’interno del costruttore stesso della classe:
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
Questo è un passo fondamentale perché ci permette di prendere il controllo dell’interfaccia video. Come vedete nel costruttore passiamo come parametro this che altro non è che l’istanza corrente della classe del gioco; questo lega il nostro gioco ad un determinato gestore logico della scheda grafica.
Notiamo anche come nel nostro costruttore venga anche inizializzata una proprietà della classe stessa:
Content.RootDirectory = "Content";
così facendo diciamo alla nostra istanza del ContentManager (il gestore dei contenuti grafici del nostro gioco) qual è il percorso radice (sul disco) dove troverà i contenuti. Questo ci permetterà in seguito di specificare i percorsi in maniera relativa alla radice, evitandoci lunghe stringhe ed errori di percorso. Nel nostro caso vediamo che lo stesso inizializzatore della radice è un percorso relativo (infatti non contiene c:\...\...) il che vuol dire che esiste una cartella Content proprio nel punto ove il nostro gioco è installato. Tale cartella altro non è che il risultato del nostro sotto-progetto Content.
Andando oltre troviamo l’inizializzazione dell’altro nostro membro, questa volta nel metodo LoadContent():
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
// TODO: use this.Content to load your game content here
}
La ragione per cui questo avviene nella LoadContent è che abbiamo dovuto lasciare il tempo al gestore della scheda video di inizializzarsi e legarsi alla nostra classe alimentando così la nostra proprietà GraphicsDevice che come vedete viene poi passata come parametro al costruttore della nostra istanza dello SpriteBatch.
Mano a mano, con il loro utilizzo concreto, vedremo cosa ci viene messo a disposizione dai tre oggetti che abbiamo così visto inizializzare, GraphicsDeviceManager, ContentManager e SpriteBatch.