Specialeffekter och spelutveckling
i Java(TM) - Appleten SlideShow II
import java.applet.*;
import java.awt.*;
public class slideshow2 extends Applet implements Runnable {
public Thread programtrad = null;
int maxitems=0;
int sleeptime=0;
Image images[];
int currentimage=0;
int nextimage = 0;
int nextimagexposition = 0;
int nextimageyposition = 0;
//bufferimage används för bufferbilden och
//bufferg används för att rita på den här
//bilden.
Image bufferimage;
Graphics bufferg;
//"delay" får användas istället för sleeptime för att
//fördräja varje animering. "sleeptime" kommer att användas
//för att lägga en konfigurerbar fördröjning mellan varje
//bild istället
int delay=0;
public void init()
{
maxitems=getIntegerParameter("maxitems",10);
sleeptime=getIntegerParameter("sleeptime",10);
images=new Image[maxitems];
MediaTracker tracker=new MediaTracker(this);
for (int i=0; i < maxitems; i++)
{
images[i]=getImage(getDocumentBase()
,getParameter("image"+i));
tracker.addImage(images[i],i);
}
try {tracker.waitForAll();}
catch(InterruptedException e)
{
System.out.println("Någonting stoppade inladdningen...");
}
//Hämta storleken för appleten
Dimension d=size();
//createImage() skapar en tom bild
//som är lika stor som appletskärmen
bufferimage=createImage(d.width,d.height);
//bufferg kopplas nu till bufferbilden
bufferg=bufferimage.getGraphics();
delay=getIntegerParameter("delay",10);
}
public int getIntegerParameter(String name, int base)
{
String value=getParameter(name);
int intvalue;
try {intvalue=Integer.parseInt(value,base);}
catch (NumberFormatException e) {return 0;}
return intvalue;
}
public void start()
{
if (programtrad == null)
{
programtrad = new Thread(this,"programtrad");
programtrad.start();
}
}
public void stop()
{
if ((programtrad != null) && programtrad.isAlive())
programtrad.stop();
programtrad = null;
}
public synchronized void paint(Graphics g)
{
//först kontrollerar vi att bufferg
//är initierat, det är inte alltid säkert
//att den är det.
if (bufferg!=null)
{
//vi ritar de två bilderna i bufferten först
bufferg.drawImage(images[currentimage],0,0,this);
bufferg.drawImage(images[nextimage]
,nextimagexposition,nextimageyposition,this);
//nu ritar vi ut bufferten i appletskärmen
g.drawImage(bufferimage,0,0,this);
}
}
public void update(Graphics g)
{
paint(g);
}
public void run()
{
Dimension d=size();
int displacementx=0;
int displacementy=0;
int pathsize=0;
currentimage=0;
nextimage=1;
while (true)
{
int directionx=(int) (Math.random()*3.0)-1;
int directiony=(int) (Math.random()*3.0)-1;
if (directionx==0 && directiony==0) directiony=1;
if (d.widthd.height) pathsize=d.width;
else pathsize=d.height;
displacementx=directionx*d.width;
displacementy=directiony*d.height;
if (nextimage>maxitems-1) nextimage=0;
for (int i=0; i < =pathsize; i++)
{
nextimagexposition=displacementx
-directionx*(i*d.width)/pathsize;
nextimageyposition=displacementy
-directiony*(i*d.height)/pathsize;
update(getGraphics());
//nu är det "delay" som är fördröjningen
//i for-slingan.
try {Thread.sleep(delay);}
catch(InterruptedException e) {}
}
//"sleeptime" används utanför slingan
try {Thread.sleep(sleeptime);}
catch(InterruptedException e) {}
currentimage=nextimage;
nextimage++;
if (nextimage > maxitems-1) nextimage=0;
}
}
} |
 |  |
|