Home E-Books Effetti speciali e sviluppo giochi in Java Miglioriamo il caricamento immagini  

Effetti speciali e sviluppo giochi in Java(TM) -Miglioriamo il caricamento delle immagini con MediaTracker 

di Anibal Wainstein (traduzione di Hanami Solutions)

4.0.2 Miglioriamo il caricamento delle immagini con MediaTracker 

Avete notato che potete praticamente vedere l'immagine caricarsi nell'esempio della scorsa sezione? Questo perché il metodo paint() viene invocato varie volte durante il download della immagine! La ragione per cui Sun ha scelto di fare il sistema così, è che voleva mantenere l'effetto di vedere qualcosa mentre si aspettava che una pagina venisse scaricata. Questo era la norma nei vecchi browsers (quelli nuovi come IE4.0, mostrano l'immagine quando è stata scaricata per intero, a meno che non si tratti di una GIF interlacciata). Il metodo paint() verrà invocato arbitrariamente dal browser quando sia riuscito a scaricare una nuova parte dell' immagine. Questo potrebbe causare problemi ed apparire brutto in alcune applets. Ma esiste una soluzione, ovvero una classe chiamata MediaTracker, la quale garantisce che l'immagine sia stata scaricata per intero prima che l'usiate.
Riscriviamo come segue il metodo init() method della scorsa sezione:

public void init()
{
    logo=getImage(getDocumentBase(),"logo.jpg");
//La seguente linea crea un tracker. MediaTracker tracker=new MediaTracker(this);
//Diamo all'immagine che vogliamo tenere sott'occhio // il numero identificativo 0. tracker.addImage(logo,0);
//Col metodo waitForAll() l'immagine può //essere caricata. Genererà un InterrupterException //se succede qualcosa.
try { tracker.waitForAll(); }
catch(InterruptedException e) {
System.out.println("Qualcosa è successo durante la lettura dell'immagine..."); } }

Un oggetto tracker richiede un riferimento alla applet quando viene creato (lo ottieni con "this"). Col metodo addImage() possiamo dare all'immagine il numero ID 0, nella "lista di download" interna del metodo. Notate bene che non potete dare a varie immagini lo stesso numero ID, ognuna deve avere un numero unico. Finalmente, possiamo usare il metodo waitForAll() che garantisce di poter caricare tutte le immagini. Questo metodo genera una eccezione che dovete "rilevare".

Clickate qua per assistere ad una versione migliorata dell' applet della scorsa sezione. In questo esempio la differenza è minima e forse nemmeno notabile, ma in applets grafiche più complicate è una necessità.

 


Pagina seguente >>