In questo capitolo esaminiamo il funzionamento del modello di applicazione che XNA ci mette a disposizione per semplificare la creazione di un gioco.
Prima di poterci occupare degli aspetti "evidenti" del nostro gioco, dobbiamo ottenere alcuni oggetti essenziali, ci serve:
- creare una finestra, sia essa una finestra di Windows o una schermata di Windows Phone 7 o dell'XBox 360;
- inizializzare il driver della scheda video (GPU) affinché sia pronta ad accettare comandi di disegno accelerati 2D o 3D
- preparare la scheda audio
- mettersi in ascolto dei vari dispositivi di input
- collegare la finestra creata alla scheda video, in modo da vedere a schermo il risultato delle operazioni di disegno eseguite dalla GPU.
Queste operazioni di inizializzazione sono complesse, ma anche con queste non siamo ancora pronti a lanciare il nostro gioco. Serve infatti un sistema che si occupi del ciclo principale dell'applicazione (il cosiddetto main loop) all'interno del quale:
- Riceviamo e processiamo i messaggi del sistema operativo (circa hardware ed eventi dell'utente)
- Aspettiamo un (eventuale) intervallo per evitare che il main loop sia troppo veloce (è inutile far andare l'applicazione più veloce della capacità del monitor di aggiornarsi, ad esempio)
- Invochiamo una routine di aggiornamento della logica di gioco per questo fotogramma
- Invochiamo una routine di rendering che disegni il fotogramma corrente
- Notifichiamo l'applicazione del fatto che sta andando troppo lenta rispetto al framerate desiderato (in modo che questa possa aggiustarsi dinamicamente il carico di lavoro, magari riducendo il campo visivo o la complessità degli effetti grafici)
A questo punto possiamo, sì, creare un gioco. Restano alcune ultime sfide da affrontare che hanno a che fare con la realizzazione di una architettura comprensibile e facilmente condivisibile con altri sviluppatori. Questo diventa fondamentale per passare da giochi molto piccoli e poco strutturati a giochi ben organizzati, comprensibili e ben fatti, in cui è chiaro dove intervenire per aggiungere una feature e dove un team composto da più persone può lavorare senza che tutti si "pestino i piedi" a vicenda.