I'm here creating a game very similar to galaxy attack, and I just finished creating the explosion animation when a monster is killed. Now, I'm trying to let it drop a powerup by a 10% chance when its hp==0, but sometimes it would drop a ton at once. I suspected that this was because there is no delay to the Greenfoot.getRandomNumber and it repeatedly gets a random number. Here is my code for the monsters:
int hp = 10;
public void collisionWithLaser()
{
hp = hp - 1;
}
private static GreenfootImage[] explosionImages = new GreenfootImage[16];
static
{
for (int i=1; i<explosionImages.length+1; i++)
{
explosionImages[i-1] = new GreenfootImage("explosion"+i+" img.png");
}
}
private int explosionTimer = -1; //-1 = not active
public void startExplosion()
{
if (explosionTimer < 0) explosionTimer = 0;
}
public void act()
{
Actor laser;
if (!getObjectsInRange(40, laser.class).isEmpty())
{
collisionWithLaser();
getWorld().removeObject(getObjectsInRange(40,laser.class).get(0));
}
if(hp==0)
{
startExplosion();
Greenfoot.getRandomNumber(11);
if(Greenfoot.getRandomNumber(11)==1)
{
powerups powerups =new powerups();
getWorld().addObject(powerups, getX(), getY());
}
}
if (explosionTimer > -1)
{
if (explosionTimer == explosionImages.length)
{
getWorld().removeObject(this);
return;
}
setImage(explosionImages[explosionTimer++]);
return;
}
if (!getObjectsInRange(100, spaceship.class).isEmpty())
{
getObjectsInRange(100, spaceship.class).get(0);
startExplosion();
}
}

