Dopo la bagarre di oggi pomeriggio, ritorniamo a parlare di cose serie. Nelle ultime settimane ho tenuto d'occhio il blog di Learn XNA, il blog ufficiale del team di XNA e questo pomeriggio ho trovato questo post davvero molto, molto interessante perchè rimanda a sua volta ad un piccolo progetto su CodePlex che implementa un componente per XNA.
Cos'è un componente per XNA? Non è nient'altro che un classico componente per .NET, così come siamo abituati a vederlo nei nostri tradizionali progetti Windows Forms. In pratica, ci permette di aggiungere nuove funzionalità al software senza dover scrivere una sola linea di codice. Nel caso di XNA, per esempio, possiamo costruire componenti per gestire la tastiera, gli sprites, effetti grafici particolari, camera, zoom, e chi ne ha più ne metta. Per chi ha già visto almeno una volta un progetto XNA, sa che la classe Microsoft.Xna.Framework.Game rappresenta il nostro videogame, che può essere manipolato da Visual Studio attraverso il classico designer, oltre che scrivere il codice necessario. In pratica, possiamo trascinare dalla toolbox i componenti che ci servono, riutilizzando il nostro codice, ed impostandone le proprietà attraverso la classica Property Window.
I componenti di XNA non sono di per sè una novità, io stesso ne ho creati qualcuno, ma era un po' ostico farli disegnare sullo schermo: nel metodo Update() della classe Game, di cui facciamo l'overloading, non facciamo altro che chiamare il metodo UpdateComponents(), che passa la palla ad ogni singolo componente presente nel gioco. Ma all'interno di ogni componente bisognava interagire con lo stesso GraphicsDevice istanziato dal Game, e qui sorgeva qualche problema - segnalato sugli stessi forum di Learn XNA. Ovviamente c'erano dei tip e dei workaround per poter comunque raggiungere il risultato, e il progetto su CodePlex di oggi pomeriggio è il primo esempio di codice per realizzare componenti davvero funzionali.
Per cui se siete interessati, e dovreste esserlo, date un'occhiata e tiratene fuori qualcosa di buono...
:-D