Hem E-böcker Specialeffekter och spelutveckling i Java Appleten SlideShow II

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

}