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 >>
|