Hem E-böcker Specialeffekter och spelutveckling i Java Snygga upp inladdning

Specialeffekter och spelutveckling i Java(TM) - Snygga upp inladdning av bilder med MediaTracker

av Anibal Wainstein

 

4.0.2 Snygga upp inladdning av bilder med MediaTracker 

Märkte du att du praktiskt taget kunde se bilden laddas in i förra avsnittets exempel? Detta beror på att paint() metoden anropas flera gånger medan bilden laddas ner! Anledningen till att Sun valde att göra så här är att de vill bevara effekten att kunna se någonting när man väntar på nedladdning av en hemsida. Detta var vanligt i äldre webbtittare (nya webbtittare som IE4.0 visar bara bilden när den är fullt nedladdad, om det nu inte råkar vara en specialkonfigurerad GIF bild). Paint() metoden kommer att anropas av webbtittaren godtyckligt när den har lyckats ladda ner en ny bit av bilden. Detta kan dock ställa till problem eller vara estetiskt oacceptabelt i vissa applets. Men det finns en lösning, det finns en klass som heter MediaTracker (Mediaspåraren), den här klassen ser till att en bild (eller ljudfil) är fullt nedladdad innan den används.
Vi skriver om init() metoden i förra avsnittet till följande:

public void init()
{

    logo=getImage(getDocumentBase(),"logo.jpg");

    //Följande rad skapar en spårare
    MediaTracker tracker=new MediaTracker(this);

    //Vi ger bilden vi vill spåra identitetsnumret 0
    tracker.addImage(logo,0);

    //Med metoden waitForAll() kan bilden laddas in
    //Den kastar en InterruptedException om 
    //någonting händer
    try
    {
        tracker.waitForAll();
    }
    catch(InterruptedException e)
    {
        System.out.println("Någonting stoppade inladdningen...");
    }
}

Ett trackerobjekt kräver en pekare till Java appleten när den skapas (det får man med "this"). Med metoden addImage() så kan vi ge bilden identitetsnumret 0 i metodens interna "inladdningslista". Observera att du inte kan ge flera bilder samma identitetsnummer utan varje bild måste ha sitt eget. Till sist kan man använda metoden waitForAll() för att se till att alla bilder laddas in. Denna metod kastar ut en exception som du måste"fånga".

Klicka här för att se en förbättrad version av förra avsnittets applet. I det här exemplet är skillnaden minimal och kanske inte ens märkbar, men i mer komplicerade grafikapplets så är det en nödvändighet.

 

 


Nästa sida >>