import greenfoot.*; public class EnemyDeathEffect extends Actor { private GreenfootImage[] frames; private int frameInterval = 5; private int currentFrame = 0; private int frameCounter = 0; private boolean fadingOut = false; private int fadeSteps = 20; private int fadeCounter = 0; private GreenfootImage originalImage; public EnemyDeathEffect() { frames = new GreenfootImage[] { new GreenfootImage("splat1.png"), new GreenfootImage("splat2.png"), new GreenfootImage("splat3.png"), new GreenfootImage("splat4.png") }; setImage(frames[0]); } public void act() { if (!fadingOut) { frameCounter++; if (frameCounter >= frameInterval) { frameCounter = 0; currentFrame++; if (currentFrame >= frames.length) { //start fading out fadingOut = true; currentFrame = frames.length - 1; originalImage = new GreenfootImage(frames[currentFrame]); //clone once setImage(new GreenfootImage(originalImage)); //set a fresh copy } else { setImage(frames[currentFrame]); } } } else { fadeCounter++; float alphaRatio = 1.0f - ((float)fadeCounter / fadeSteps); if (alphaRatio < 0) { alphaRatio = 0; } GreenfootImage img = new GreenfootImage(originalImage); //reuse original img.setTransparency((int)(255 * alphaRatio)); setImage(img); if (fadeCounter >= fadeSteps) { if (getWorld() != null) { getWorld().removeObject(this); } } } } }

