Hem E-böcker Specialeffekter och spelutveckling i Java En animationsapplet

Specialeffekter och spelutveckling i Java(TM) - En animationsapplet (AppletAnimator)

av Anibal Wainstein

4.0.4 En animationsapplet (AppletAnimator) 

Med appleten AppletAnimator ska vi försöka efterapa effekten som animerade GIF89 bilder ger. Vi laddar in flera enstaka bilder i init() metoden:

//ImageArrayen "images" får vara global 
Image images[];

//"currentimage" får hålla reda på vilken bild som visas
int currentimage=0;

public void init()
{
    //initiera "images" med fyra element
    images=new Image[4];
    MediaTracker tracker=new MediaTracker(this);


    //vi använder oss av en for-slinga för att ladda 
    //in bilderna
    for (int i=0; i<4; i++)
    {
        //"bild0.gif","bild1.gif",...,"bild3.gif" kommer att
        //laddas in.
        images[i]=getImage(getDocumentBase(),"bild"+i+".gif");

        //identitetsnummret för varje bild måste ökas för
        //varje bild man lägger in i spåraren
        tracker.addImage(images[i],i);
    }

    //slutligen så ser vi till att spåraren laddar 
    //in bilderna
    try {tracker.waitForAll();}
    catch(InterruptedException e)
    {
        System.out.println("Någonting stoppade inladdningen...");
    }
}          

Vi börjar med att initiera bildarrayen med 4 Image objekt. Metoden getImage() laddar in bilder och for-slingan ser till att bilderna hamnar på rätt plats i arrayen och i spåraren. Dvs "images[0]" kommer att peka på "bild0.gif" samtidigt som den hamnar på plats "0" i spårarens inladdningslista, "images[1]" kommer att peka på "bild1.gif" samtidigt som den finns i plats "1" i inladdningslistan o.s.v.

 
"images"-index Filnamn MediaTracker inladdningslista
0
"bild0.gif"
0
1
"bild1.gif"
1
2
"bild2.gif"
2
3
"bild3.gif"
3

Appleten kommer att vara en trådbaserad applet med start()- och stop()-metoder, som du kan läsa mer om i avsnitt 3.0.1. Run() metoden ser nästan likadan ut som i textscroller exemplet i kapitel 3:

public void run()
{
    while (true)
    {
        update(getGraphics());

        //"currentimage" ökas på så att nästa bild visas vid
        //nästa skärm-uppdatering
        currentimage++;

        //Den får dock inte överstiga indexsiffran 3
        if (currentimage>3) currentimage=0;
        try {Thread.sleep(200);}
        catch(InterruptedException e) {}
    }
} 

Den enda ändringen vi har lagt till i textscrollers run() metod är behandlingen av variabeln "currentimage". Den här variabeln kommer att användas som index för att kunna byta bild var 200 millisekund då vi uppdaterar skärmen (5ggr per sekund). Paint() metoden kommer att se ut på följande sätt:

public synchronized void paint(Graphics g)
{
    //Integern "currentimage" används som index för "images"
    g.drawImage(images[currentimage],0,0,this);
}

Bilderna som vi ska animera ser ut så här:

Resultatet av animeringen kommer se ut som om pilen roteras.Detta är inte mycket att se på och vi kommer i ett senare kapitel att gå igenom hur man kan göra detta med en enda bild och bildbehandling. Klicka här för att se appleten.

 

 

 

 


Nästa sida >>