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

Specialeffekter och spelutveckling i Java(TM) - Appleten SlideShow

  
import java.applet.*;
import java.awt.*;

public class slideshow extends Applet implements Runnable {

public Thread programtrad = null;
int maxitems=0;
int sleeptime=0;
Image images[];
int currentimage=0;
//next-variablerna bestämmer vilken bild som
//skall visas och dess position
int nextimage = 0;
int nextimagexposition = 0;
int nextimageyposition = 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...");
    }
}

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)
{
    g.drawImage(images[currentimage],0,0,this);
    //följande bild ritas ovanpå den gamla bilden
    g.drawImage(images[nextimage]
         ,nextimagexposition,nextimageyposition,this);}

public void update(Graphics g)
{
    paint(g);
}

public void run()
{
    //vi tar reda på appletens dimension och
    //sparar det i variabeln d. Vi kan nu komma
    //åt appletens bredd och höjd genom att skriva
    //d.width resp. d.height
    Dimension d=size();
    //displacement variablerna specifierar
    //startkoordinaterna för bilden
    int displacementx=0;
    int displacementy=0;
    //pathsize kommer att användas för att veta
    //vilket avstånd som den nya bilden kommer
    //att flyttas
    int pathsize=0;
    //currentimage initieras så att den börjar med 
    //den första bilden, följt av nästa bild som blir
    //bild nummer två osv
    currentimage=0;
    nextimage=1;
    while (true)
    {
        //Vi räknar ut vilket håll som den nya
        //bilden skall flyttas från
        int directionx=(int) (Math.random()*3.0)-1;
        int directiony=(int) (Math.random()*3.0)-1;

        //directionx och directiony kan komma
        //att få tre värden: -1, 0 och 1.
        //det är inte kul om båda får värdet 0
        //samtidigt så därför så ändrar vi på
        //directiony så att effekten blir lite
        //roligare
        if (directionx==0 && directiony==0) directiony=1;

        //variabeln pathsize sätts till bredden eller
        //höjden beroende på vilken som är lägst
        if (d.widthd.height) pathsize=d.width;
        else pathsize=d.height;
        displacementx=directionx*d.width;
        displacementy=directiony*d.height;

        //följande rad är skydd mot problemet
        //om användaren specifierar bara en enda
        //bild
        if (nextimage>maxitems-1) nextimage=0;

        //följande slinga tar hand om att uppdatera
        //skärmen under animeringen. Den kommer att
        //flytta bilden antal ggr som specifieras
        //av pathsize, dvs kortsidan av appleten.
        for (int i=0; i < =pathsize; i++)
        {
            //bildpositionerna flyttas med
            //bråkdelen (i/pathsize).
            nextimagexposition=displacementx
                -directionx*(i*d.width)/pathsize;
            nextimageyposition=displacementy
                -directiony*(i*d.height)/pathsize;
            update(getGraphics());
            try {Thread.sleep(sleeptime);}
            catch(InterruptedException e) {}
        }
        //när flyttningen är klar så sätts currentimage
        //till den nya bilden
        currentimage=nextimage;

        //Vi ökar nextimage så att den
        //pekar på nästa bild, samtidigt så ser vi till
        //att nextimage inte överstiger arrayens index
        //utan att den tvingas börja om från början
        nextimage++;
        if (nextimage > maxitems-1) nextimage=0;
    }
}

}