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

Specialeffekter och spelutveckling i Java(TM) - Appleten SpacePirates Step 3

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

public class spacepiratesstep3 extends Applet implements Runnable {

public Thread programthread = null;
int sleeptime=60;
Image policeship[];
Image bufferimage;
Graphics bufferg;
int y0;
int v=0, py=0;

//Variabeln "ground" har bilden på
//marken.
Image ground;

//"groundposition" indikerar markens
//horizontella position.
int groundposition=0;

public void init()
{
    Dimension d=size();
    bufferimage=createImage(d.width,d.height);
    bufferg=bufferimage.getGraphics();

    policeship=new Image[5];
    MediaTracker tracker=new MediaTracker(this);
    for (int i=0; i<5; i++)
    {
        policeship[i]=getImage(getDocumentBase(),"policeship"+i+".gif");
        tracker.addImage(policeship[i],i);
    }
    //Innan vi anropar waitForAll() så lägger vi in "ground"
    //i spåraren.
    ground=getImage(getDocumentBase(),"woods.gif");
    tracker.addImage(ground,5);
    try {tracker.waitForAll();}
    catch(InterruptedException e)
    {
        System.out.println("Någonting stoppade inladdningen...");
    }

    py=150;
}

public boolean mouseMove(Event e, int x, int y)
{
    y0=y;
    return true;
}

public synchronized void paint(Graphics g)
{
    if (bufferimage!=null) g.drawImage(bufferimage,0,0,this);
}

public void start()
{
    if (programthread == null)
    {
         programthread = new Thread(this,"programthread");
         programthread.start();
    }
}

public void stop()
{
    if ((programthread != null) && programthread.isAlive())
        programthread.stop();
    programthread = null;
}

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

public void run()
{
    while (true)
    {
        if (y0-py>0)
        {
            v++;
            if (y0-py<10) v=3;
            if (y0-py<5) v=1;
        }
        if (y0-py<0)
        {
            v--;
            if (y0-py>-10) v=-3;
            if (y0-py>-5) v=-1;
        }

        if (y0-py==0) v=0;
        if (v<-4) v=-4;
        if (v>4) v=4;
        py+=v;

        //Marken åker med en hastighet på 2
        //pixlar per bild.
        //Vi måste också se till att markens
        //position nollställs när den hamnar
        //under -600 pixels. Bredden på bilden är
        //nämligen 600 pixels.
        groundposition-=2;
        if (groundposition<-600) groundposition=0;

        //Rita ut marken på den horizontella
        //positionen "groundposition".
        bufferg.drawImage(ground,groundposition,0,this);

        //Om bilden inte räcker till för att fylla
        //ut skärmen, dvs om groundposition<-200
        //så rita ut en kopia i positionen
        //(groundposition+600).
        if (groundposition<-200)
            bufferg.drawImage(ground,(groundposition+600),0,this);

        bufferg.drawImage(policeship[2+v/2],0,-55+py,this);
        update(getGraphics());
        try {Thread.sleep(sleeptime);}
        catch(InterruptedException e) {}
    }
}

}