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) {}
}
}
} |
| |
|