Effetti speciali e sviluppo giochi in Java(TM) -Una applet animata (AppletAnimator)
di Anibal Wainstein (traduzione di Hanami Solutions)
4.0.4 Una applet animata
(AppletAnimator)
Con la applet AppletAnimator cercheremo di imitare l'
effetto dato dalle GIF animate. Carichiamo diverse
immagini nel metodo init():
//L'array Image "images" deve essere globale.
Image images[];
//La variabile "currentimage" conterrà
//l'immagine mostrata in quel momento. int currentimage=0; public void init()
{ //Inizializziamo "images" per avere quattro elementi.
images=new Image[4];
MediaTracker tracker=new MediaTracker(this);
//Usiamo un ciclo for per caricare le immagini. for (int i=0; i<4; i++)
{ //"image0.gif","image1.gif",...,"image3.gif" verranno
//caricate.
images[i]=getImage(getDocumentBase(),"image"+i+".gif");
//La ID di ogni immagine deve essere incrementata //Per ogni immagine aggiunta //al tracker.
tracker.addImage(images[i],i);
}
//Alla fine assicuriamoci che il tracker carichi le immagini. try {tracker.waitForAll();} catch(InterruptedException e)
{ System.out.println("È successo qualcosa durante la lettura delle
immagini...");
}
}
Partiamo inizializzando l'array delle immagini con 4 oggetti Image.
Il metodo getImage() leggerà le immagini e il ciclo for
garantirà che le immagini finiscano nel posto giusto nell'
array e nel tracker. Il che significa che "images[0]"
farà riferimento a "image0.gif" mentre viene
aggiunto alla locazione 0 nell'elenco del tracker. La
variabile "images[1] farà riferimento a "image1.gif"
mentre si colloca nella locazione 1, nell'elenco del tracker, e
così via.
| Indice-"images" |
Nome del file |
Elenco MediaTracker |
| 0 |
"image0.gif" |
0 |
| 1 |
"image1.gif" |
1 |
| 2 |
"image2.gif" |
2 |
| 3 |
"image3.gif" |
3 |
L' applet sarà basata su thread con metodi start() e
stop() dei quali potete leggere in merito nella sezione 3.0.1.
Il metodo Run() sembra praticamente lo stesso del textscroller
d'esempio del Capitolo 3:
public void run()
{ while (true) { update(getGraphics()); //"currentimage" viene incrementato così che la prossima
//immagine venga mostrata nel prossimo aggiornamento dello schermo.
currentimage++; //Comunque, "currentimage" non deve superare il
//valore dell'indice 3. if (currentimage>3) currentimage=0; try {Thread.sleep(200);} catch(InterruptedException e) {} }
}
L'unico cambiamento che abbiamo apportato al metodo run() del textscroller
è la gestione della variabile "currentimage".
Questa variabile verrà usata come indice così che la applet
cambi immagine ogni 200 millisecondi (5 volte al secondo). Il metodo
paint() apparirà così:
public synchronized void paint(Graphics g)
{
//Il numero intero "currentimage" viene usato
//come indice per l'array "images".
g.drawImage(images[currentimage],0,0,this);
}
Le immagini che animeremo appariranno così:
Il risultato dell' animazione sarà che la freccia apparirà
come se ruotasse. Non è molto interessante da vedere e
esamineremo in un prossimo capitolo come possiamo farlo usando
una sola immagine e ricorrendo alla sua manipolazione. Clickate
qui per vedere la applet.
Pagina seguente >>
|