Aggiornamenti on the Way.
feb 7
Bien bien, pare che qualcuno sta tornando a scrivere qualcosa da queste parti più di frequente rispetto a prima. La situazione per ora è la seguente: domani do l’ultimo esame di questo semestre. Dopo questo esame avrò un mesetto di pseudo libertà, che già ho deciso come usare.
Sto mettendo un pò a posto il blog, sto modificando un po le varie pagine e sto raggruppando il tutto. In questo modo lascerò spazio per un futuro portfolio che dovrebbe arrivare appena potrò pubblicarne uno.
Inoltre, sto pensando di tradurre nella mia lingua i Tutorial di Michael James Williams sullo sviluppo di giochi in flash con l’ausilio di ActionScript 3.0. Sarebbe un modo interessante anche di conoscere gente nuova e fare pratica con l’inglese e la programmazione di giochi.
Alla prossima!
Blackberry in Arrivo
feb 5
Salve bella genteeeee! In questi giorni sono stato un pò assente, come d’altronde nell’ultimo periodo. Ma perlomeno so che il blog non sta morendo, così come il sito. Più che altro, c’è un momento per utilizzarlo in un modo e un momento per utilizzarlo nell’altro.
In questi giorni sto facendo qualche lavoretto in php che mi ha permesso di mettere da parte qualche soldo… ed in arrivo ho un bel Blackberry *_* Chi lo sa, magari sarà una buona occasione per mettere mano al Java e parlarne qui su!
Oppure potrei mettere le mani sull’Actionscript 3, che già avevo iniziato a vedere… Alla prossima people!
La Situazione?
gen 23
Ciao a tutti, scusate se per lungo tempo sono stato assente ma gli esami e altre cose mi hanno impedito di venire qui
Oggi vorrei parlare di una situazione che personalmente mi sta molto a cuore: il game developing in Italia. O meglio, della scena e delle situazioni che creano un mondo. Qualche tempo fa avevo contattato Wergio di GPI, ottenendo delle risposte riguardo ad un “miglioramento dei servizi”.
Niente da obiettare, anzi ringrazio ancora Wergio per le risposte che mi ha dato. Tuttavia, con mia somma tristezza, ho scoperto che la cosa andava avanti già da un sacco di tempo. Avvisaglie di questi “miglioramenti” vanno avanti addirittura dal 2007.
Ora io mi chiedo: è davvero tutto spento? E’ vero quel che vedo? Siti fantasma, pagine inesistenti e servizi interrotti. Per carità, capisco perfettamente che questi servizi hanno dei costi per poter essere mantenuti. Ma almeno penso sarebbe bello saperne qualcosa di più.
Magari per organizzarsi meglio!
Per ora è tutto, grazie.
The Neverending Fall
gen 9
La prima è andata, ora vediamo ’sta seconda
Stanotte ho postato su Newgrounds “The Neverending Fall”, realizzato in flash e che mette il giocatore nei panni di un omino che si ritrova a cadere dall’infinito verso l’infinito. Senza un perchè e senza un tempo e un luogo. Solo una caduta interminabile, con ostacoli da schivare e powerups da raccogliere.
Stavolta niente host qui sopra, ci pensa Newgrounds!
Buon Divertimento!
ASCIICopter su GamesVillage
gen 8
Le prime soddisfazioni arrivano. Stamattina sono andato a controllare le prime visite dopo la pubblicazione di ASCIICopter ed ho ritrovato la pagina della pubblicazione su GamesVillage! Fatti insomma, non pugnette. La felicità e tante e lo è ancora di più la spinta e la voglia di andare avanti.
Nei prossimi giorni sarà pronto un altro giochetto in flash che verrà proposto anche su newgrounds, sperando che stavolta non me lo flagghino senza motivo
Cheers!
AsciiCopter
gen 3
Dopo un paio di giorni di smanettamenti con Flash ed AS 2.0, ecco che posso fieramente presentare il mio primo giochillo giocabile direttamente su internet: ASCIICopter. Lo scopo del gioco è evitare gli ostacoli che vi si porranno davanti durante la partita, comandando l’elicottero con il pulsante sinistro del mouse.
(Click sull’immagine per giocare)
I ringraziamenti li troverete direttamente nel gioco, nei credits.
Per un pò credo di sparire a causa degli esami, ma ovviamente tornerò presto
Cheers!
Flash is the way. :Q_
gen 2
Buongiorno, eccomi qua nel primo intervento del 2010. The Void vi augura un buon anno ed un felice 2010, sperando che sia 300 volte meglio del 2009. Scrivo questo post perchè questi sono giorni di attesa, in quanto sto aspettando i disegni e la grafica per il giochetto che sto facendo in XNA.
Per passare il tempo mi sono messo a guardare qualcosa del flash, e devo dire che mi ha colpito molto o.o Chissà che non smanetterò con quello in futuro… (già lo sto facendo).
Saluti.
Disegnare il testo su schermo – Grafica – XNA Tutorials
dic 31
In questo articolo analizzeremo DrawString, il metodo della classe SpriteBatch che si occupa di disegnare a schermo il testo. Vedremo velocemente come caricare e un font in memoria e successivamente smanetteremo un pò, guardando i vari risultati ottenuti.
Innanzitutto, lavorando con XNA dobbiamo sapere che il font viene rappresentato, come risorsa, tramite un file di tipo SpriteFont. Questo file conterrà la descrizione del font che utilizzeremo: parametri come la grandezza, il nome del font e così via saranno specificati qui.
Per creare un file SpriteFont, clicchiamo con il pulsante destro del mouse su Content, nell’Esplora Soluzioni, quindi su Aggiungi -> Nuovo Elemento. (in figura il procedimento)

Ci si aprirà una finestra dove dovremo selezionare il tipo di risorsa da creare e il nome da assegnare. Ovviamente sceglieremo SpriteFont e daremo come nome, per esempio, “font1″.
(click per ingrandire)
Dando l’ok sarà questo il codice che ci ritroveremo davanti per questa risorsa (ho cancellato i commenti per risparmiare spazio):
<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
<Asset Type="Graphics:FontDescription">
<FontName>Kootenay</FontName>
<Size>14</Size>
<Spacing>0</Spacing>
<UseKerning>true</UseKerning>
<Style>Regular</Style>
<CharacterRegions>
<CharacterRegion>
<Start> </Start>
<End>~</End>
</CharacterRegion>
</CharacterRegions>
</Asset>
</XnaContent>
I parametri sono veramente semplici da capire. FontName definisce il nome del font utilizzato: lo cambierò in “Arial” (senza virgolette ovviamente). Size indica la grandezza del font da utilizzare in fase di scrittura. Spacing indica invece la larghezza tra un carattere e l’altro, mentre UseKerning è un opzione che gestisce il layout del font. Style consente inoltre di decidere che tipo di stile applicare al testo scritto: grassetto, corsivo e così via.
La CharacterRegion indica l’insieme dei caratteri che è possibile riprodurre. Per ora lo lasceremo così, successivamente modificheremo questi valori per permetterci di riprodurre altri caratteri.
Ecco quindi come appare il file dopo la mia piccola modifica:
<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
<Asset Type="Graphics:FontDescription">
<FontName>Arial</FontName>
<Size>14</Size>
<Spacing>0</Spacing>
<UseKerning>true</UseKerning>
<Style>Regular</Style>
<CharacterRegions>
<CharacterRegion>
<Start> </Start>
<End>~</End>
</CharacterRegion>
</CharacterRegions>
</Asset>
</XnaContent>
Ora che la nostra risorsa è pronta, dobbiamo includerla con il codice. Creiamo una variabile di tipo SpriteFont e, successivamente, carichiamo la nostra risorsa un pò come avevamo fatto con le immagini, nel metodo LoadContent.
Quindi, prima dichiariamo
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
SpriteFont font1;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
e dopo carichiamo.
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
font1 = Content.Load<SpriteFont>("font1");
}
A questo punto non dobbiamo fare altro che disegnare un pò di cose a schermo. Iniziamo con una scritta semplice, la classica “Ciao Mondo!” (non poteva mancare). Modificando il codice del metodo Draw con le istruzioni riportate qui,
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin();
spriteBatch.DrawString(font1, "Ciao Mondo!!!", new Vector2(10, 10), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
il risultato sarà semplicemente questo illustrato.
(click per ingrandire)
Proviamo qualcos’altro.
Tornando ad analizzare il metodo SpriteBatch.DrawString, vediamo un pò quali sono i parametri che diamo.
- Il primo parametro di tipo SpriteFont è il font con cui disegneremo il testo. Verdana, Arial, Times New Roman di qualsiasi grandezza, questo è il punto di riferimento per eventuali cambiamenti.
- Il secondo parametro è la stringa di testo che vogliamo portare su schermo.
- Il terzo parametro è un vettore di tipo Vector2 che si occupa di definire su schermo la posizione del testo. Nel mio caso volevo mettere il testo in posizione x = 10 ed y = 10 ed ho definito così il vettore di conseguenza.
- Il quarto parametro è il colore del testo, che possiamo cambiare a nostro piacimento. Qui di seguito qualche prova con i valori Green, Red e Lime.



Dopo queste prove con il colore vediamo l’overload del metodo da noi usato, che al posto dei classici quattro parametri ne presenta di più, precisamente 9. Grazie a questo metodo potremo ruotare il nostro testo:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin();
spriteBatch.DrawString(
font1,
"testo di prova 2",
new Vector2(200, 200),
Color.White,
10,
new Vector2(
font1.MeasureString("testo di prova 2").X/2,
font1.MeasureString("testo di prova 2").Y/2
),
1.0f,
SpriteEffects.None,
1
);
spriteBatch.End();
base.Draw(gameTime);
}
I primi quattro parametri rimangono invariati: non abbiamo bisogno di descriverli un’altra volta. Ciò che cambia invece arriva dopo. Abbiamo quel “10″ che rappresenta l’angolo di rotazione che vogliamo usare. Ovviamente serve un centro di rotazione, ed a questo serve il successivo parametro, di tipo Vector2. E’ prevista anche la possibilità di gestire lo scaling del testo (il ridimensionamento) tramite un parametro di tipo Float. Infine abbiamo il tipo di effetto da dare al testo (provate voi stessi a smanettarci per vedere i risultati) ed infine la profondità del layout come ultimo parametro.
Ecco qui il risultato del codice, ed anche con il testo per ora abbiamo finito.
(click per ingrandire)
P.S: è importante sapere come regolarsi con le CharacterRegions del file XML della risorsa. Come ho detto precedentemente, questo parametro del font permette di decidere quali caratteri verranno ridisegnati. I valori che notiamo nel codice
<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
<Asset Type="Graphics:FontDescription">
<FontName>Arial</FontName>
<Size>14</Size>
<Spacing>0</Spacing>
<UseKerning>true</UseKerning>
<Style>Regular</Style>
<CharacterRegions>
<CharacterRegion>
<Start> </Start>
<End>~</End>
</CharacterRegion>
</CharacterRegions>
</Asset>
</XnaContent>
tra i tag Start ed End sono i codici ASCII di partenza e di arrivo dell’insieme dei caratteri riproducibili. In poche parole, il sistema sarà in grado di disegnare su schermo i caratteri che hanno il codice ASCII che va da 32 a 126. Volendo portare a schermo dei caratteri come “ò” oppure “à” dovremo necessariamente modificare l’intervallo, in quando non include questi caratteri. Al posto di 126, nel tag End, usate 255 e non dovreste avere ulteriori problemi.
Cheers.
Disegnare una sprite animata – Grafica – XNA Tutorials
dic 30
In questo articolo impareremo a disegnare su schermo una sprite animata tramite poche e semplici istruzioni. Innanzitutto, ecco l’immagine che ho usato io per questa prova:
![]()
Come potete notare non è niente di che: un insieme di quadrati con un semplice effetto di illuminazione, fatto in photoshop in due secondi. Ora, se volessimo partire da questa immagine per creare un animazione, come fare? Basta ragionare in termini di frame. Mi spiego meglio: provate a disegnare uno dopo l’altro, nella stessa posizione, i quadrati contenuti in quest’immagine e non uno a fianco all’altro.
Quale effetto otterreste? Eccolo.
![]()
Spero di essere stato chiaro, più di tanto non potevo
Prenderemo la nostra immagine di esempio e disegneremo su schermo una parte per volta e non tutta insieme, in modo tale da dare l’idea dell’animazione. Come si fa? Ecco il codice, che piano piano spiegherò nel dettaglio (per quanto sia veramente facile).
Nota: nella stessa cartella dell’eseguibile ho posizionato il file “immagine.png”, in quanto ho caricato la texture direttamente da file.
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
namespace GiocoDiProva
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D immagine;
int number_of_frames = 10;
int current_frame = 0;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
base.Initialize();
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
immagine = Texture2D.FromFile(this.GraphicsDevice, "immagine.png");
}
protected override void UnloadContent()
{
}
protected override void Update(GameTime gameTime)
{
if (current_frame < number_of_frames)
{
current_frame++;
}
else
{
current_frame = 0;
}
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin();
spriteBatch.Draw(immagine, new Rectangle(200, 200, 40, 40), new Rectangle(current_frame * 40, 0, 40,40), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
}
}
Partiamo dalle dichiarazioni delle variabili:
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D immagine;
int number_of_frames = 10;
int current_frame = 0;
La Texture2D immagine è la nostra texture che verrà “sezionata” per poi essere disegnata. “number_of_frames” è invece il numero dei frames totali di cui si compone la nostra animazione. “current_frame” è invece un intero che assumerà il numero del frame attuale per sapere in ogni istante quale parte dell’immagine deve essere riprodotta.
Il metodo Update spiega meglio l’utilizzo di queste due variabili (il metodo LoadContent l’ho saltato perchè mi pare ovvio ormai a cosa serve
):
protected override void Update(GameTime gameTime)
{
if (current_frame < number_of_frames)
{
current_frame++;
}
else
{
current_frame = 0;
}
base.Update(gameTime);
}
In questo metodo controlliamo se il frame attuale che stiamo considerando è minore del conteggio totale dei frames. Se ciò avviene, allora andremo avanti di frame passando al successivo, tramite un semplice incremento. Altrimenti, se il controllo restituisce falso, vuol dire che abbiamo raggiunto la fine dell’animazione e dobbiamo riniziare da capo. A questo proposito aggiungiamo il “current_frame = 0″.
Ora che abbiamo deciso quale frame disegnare, dobbiamo utilizzare quest’informazione nel metodo Draw. Ecco il codice:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
spriteBatch.Begin();
spriteBatch.Draw(immagine, new Rectangle(200, 200, 40, 40), new Rectangle(current_frame * 40, 0, 40,40), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
Stavolta basta una sola istruzione. Precisamente, il metodo Draw che prende quattro parametri in input:
- la texture da disegnare.
- il rettangolo di “destinazione”, ovvero il nostro frame con le coordinate di disegno e la grandezza del frame desiderato. In quest’esempio, ho disegnato la sprite alle coordinate 200,200, con una grandezza del frame di 40×40 (che è appunto la dimensione di ogni quadrato incluso il contorno).
- il rettangolo “sorgente”, ovvero quel rettangolo che racchiude tutta l’immagine (per intenderci, la prima da me esposta all’inizio dell’articolo.
- il colore da usare per la modulazione del canale (come al solito ho usato il bianco).
Come per ogni test, premete F5 e guardate il risultato
Ridimensionare una Sprite – Grafica – XNA Tutorials
dic 29
Ridimensionare una sprite, al pari della rotazione, è un’operazione molto semplice, nonostante sia molto comune in tantissimi giochi. Comunque sia, chiacchiere a parte, in questo articolo affronteremo due metodi di ridimensionamento: prima quello “fisso”, ovvero il disegno della texture ridimensionata, e successivamente quello “variabile” tramite input da tastiera.
- Ridimensionamento “fisso”
Il nocciolo della questione, come potete immaginare, si trova nel metodo Draw, che come abbiamo detto prima è il punto in cui i contenuti vengono disegnati su schermo. A fare la parte importante, nel nostro caso, è il rettangolo che noi diamo come parametro nel metodo Draw dello SpriteBatch da noi utilizzato. Nello specifico, di questo rettangolo modificheremo larghezza ed altezza.
Ecco il metodo Draw:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(immagine, new Rectangle(10, 10, immagine.Width * 2, immagine.Height * 2), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
Stavolta ho semplicemente dato come dimensione del rettangolo una larghezza pari al doppio della rispettiva nell’immagine e un’altezza calcolata in egual modo. Il risultato? Eccolo.
(Click per ingrandire)
Adesso passiamo all’ingrandimento dato dall’input dell’utente. Anche questo è molto semplice da gestire: tuttavia, richiederà qualche variabile in più in quanto abbiamo dei problemi a livello di tipo di variabili.

Mi spiego meglio: come potete vedere dall’intellisense, la proprietà Width e Height di una texture sono di tipo Int. Questo vuol dire che, per ottenere un’ingrandimento di, toh, una volta e mezzo (x1.5) avremo dei problemi rimanendo ad usare gli interi. Per cui, ecco cosa faremo.
- Creiamo una variabile di tipo float, chiamata moltiplicatore. Qui memorizzeremo il valore da usare per la moltiplicazione nel ridimensionamento.
- Modifichiamo il metodo Update in modo da gestire l’input da tastiera.
- Modifichiamo il metodo Draw in modo da disegnare bene la nostra immagine.
Ecco la nostra variabile:
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D immagine;
float moltiplicatore = 1.0f;
In fase di disegno moltiplicheremo le dimensioni dell’immagine per questo valore. Ponendo come valore iniziale 1.0, inizialmente la nostra immagine verrà disegnata nella sua grandezza naturale.
Ora gestiamo l’input da parte dell’utente: stavolta i tasti che useremo saranno il “+” per ingrandire ed il “-” per rimpicciolire. Il metodo Update verrà riscritto così:
protected override void Update(GameTime gameTime)
{
if (Keyboard.GetState().IsKeyDown(Keys.Add))
{
if (moltiplicatore < 2.0f)
{
moltiplicatore += 0.05f;
}
}
if (Keyboard.GetState().IsKeyDown(Keys.Subtract))
{
if (moltiplicatore > 0.5f)
{
moltiplicatore -= 0.05f;
}
}
base.Update(gameTime);
}
Per evitare problemi nel mostrare l’immagine (dimensioni negative e così via) ho limitato il ridimensionamento in modo tale che vada da un minimo di 0.5 (la metà della grandezza originale) a 2.0 (il doppio
). I valori “Keys.Add” e “Keys.Subtract” sono i corrispettivi del “+” e del “-”.
(nel caso togliate i limiti del ridimensionamento, andando in negativo si ottiene l’immagine capovolta, quando la variabile moltiplicatore è diversa da zero)
Infine ecco il metodo Draw riscritto:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(immagine, new Rectangle(10, 10, (int)(immagine.Width * moltiplicatore), (int)(immagine.Height * moltiplicatore)), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
Ogni dimensione viene moltiplicata per il moltiplicatore (gioco di parole non voluto) e successivamente visto come int tramite l’aggiunta di “(int)” dietro l’espressione da usare. Potete provare voi stessi il tutto senza ulteriori spiegazioni








Ultimi Commenti