This is the code that keeps the flickering at bay for me.
public class Mothership implements Runnable {
private GameBoardMultBall gameBoard;
private Thread t;
private Image image;
private int xPosition;
private int yPosition;
private int xVel;
private Random r = new Random();
private ArrayList bombList;
private boolean explodeFlag;
private Image[] explosion;
private double index;
private MediaTracker mt;
public Mothership(GameBoardMultBall gameBoard, ArrayList bombList) {
this.gameBoard = gameBoard;
this.bombList = bombList;
this.image = Toolkit.getDefaultToolkit().getImage("Images/mothership_transparent.gif");
explosion = new Image[] {
Toolkit.getDefaultToolkit().getImage("Images/Mothership explosion/mship_exp_1.gif"),
Toolkit.getDefaultToolkit().getImage("Images/Mothership explosion/mship_exp_2.gif"),
Toolkit.getDefaultToolkit().getImage("Images/Mothership explosion/mship_exp_3.gif"),
Toolkit.getDefaultToolkit().getImage("Images/Mothership explosion/mship_exp_4.gif"),
Toolkit.getDefaultToolkit().getImage("Images/Mothership explosion/mship_exp_5.gif"),
Toolkit.getDefaultToolkit().getImage("Images/Mothership explosion/mship_exp_6.gif"),
Toolkit.getDefaultToolkit().getImage("Images/Mothership explosion/mship_exp_7.gif"),
Toolkit.getDefaultToolkit().getImage("Images/Mothership explosion/mship_exp_8.gif"),
Toolkit.getDefaultToolkit().getImage("Images/Mothership explosion/mship_exp_9.gif")
};
mt = new MediaTracker(gameBoard);
for(int i = 0; i < explosion.length; i++)
mt.addImage(explosion[i], 0);
this.xPosition = -60;
this.yPosition = r.nextInt(41);
this.xVel = r.nextInt(4) + 1;
//this.xVel = 2;
}
public void drawMothership(Graphics g) {
g.drawImage(image, xPosition, yPosition, null);
}
public void enter() {
t = new Thread(this);
t.start();
//return this;
}
public int getXPos() {
return xPosition;
}
public void setYPos(int yPos) {
this.yPosition = yPos;
}
public int getYPos() {
return yPosition;
}
public void explode() {
explodeFlag = true;
}
public Thread getThread() {
return t;
}
public void run() {
System.out.println("Enter Mothership!\nyVel = " + xVel);
while(xPosition < 550) {
xPosition++;
int a = r.nextInt(200);
if(a == 20) {
if(bombList.size() < gameBoard.MAX_BOMBS && explodeFlag != true)
bombList.add(new Bomb(xPosition + 15, yPosition + 5));
}
if(explodeFlag == true || gameBoard.endTurnFlag == true)
break;
try{
Thread.sleep(xVel * 20);
}
catch(Exception e) {}
}
if(explodeFlag == true) {
try{
mt.waitForID(0);
}
catch(InterruptedException ie) {}
while(index < explosion.length) {
image = explosion[(int) index];
index += 0.5;
try{
Thread.sleep(50);
}
catch(Exception e) {}
}
}
System.out.println("Ship eligible for deletion!");
}
}
Right now my game actually works! The thing left is to optimize it… For instance, I start a thread for about every moving thing in the game (and there are sometimes about 50 things moving…) I have to take those away and make move() methods instead (or does anybody else have good ideas on the subject?). And I do the painting using good old paint(Graphics g)… I didn’t know there was any other way before I checked Kevin’s game tutorial out… Good shit!!!
Time to rewrite…
Thanks for all input! More!
/Kaspar