I really need help with my Classes. I recently i uploaded pixel invaders, but the performance is bad. I´d like to optimize the Animation Class and EnemySpawner. I think they are the source of lagg.
My Animation Class:
My EnemySpawner Class:
import greenfoot.*;
import java.util.List;
import java.util.ArrayList;
public class Animation
{
private static List<Animation> animations = new ArrayList();
private static List<String> names = new ArrayList();
private Content owner;
private int frames;
private int curFrame = 1;
private List<GreenfootImage> images = new ArrayList();
private List<Integer> frame = new ArrayList();
public Animation(int frames)
{
this.frames = frames;
add(this, Integer.toString(animations.size()+1));
}
public Animation(int frames, String name)
{
this.frames = frames;
add(this, name);
}
public void addImage(GreenfootImage image, int actionFrame)
{
images.add(image);
frame.add(actionFrame);
}
public void nextFrame()
{
int size = images.size();
for(int i = 0; i<size; i++)
{
if(curFrame == frame.get(i))
{
owner.setImage(images.get(i));
}
}
curFrame++;
if(curFrame == frames)
{
curFrame = 1;
}
}
public void reset()
{
curFrame = 0;
}
public static void add(Animation a, String name)
{
animations.add(a);
names.add(name);
}
public static void createAnimation(int frames)
{
Animation a = new Animation(frames);
}
public static void createAnimation(int frames, String name)
{
Animation a = new Animation(frames, name);
}
public static Animation getAnimation(String name)
{
int size = names.size();
for(int i = 0; i<size; i++)
{
if(names.get(i) == name)
{
return animations.get(i);
}
}
return null;
}
public static Animation setAnimation(Content owner, String name)
{
Animation a = getAnimation(name);
a.setOwner(owner);
return a;
}
public static Animation cloneAnimation(String name)
{
Animation toClone = getAnimation(name);
Animation a = new Animation(toClone.getFrames());
a.setImages(toClone.getImages());
a.setFrameList(toClone.getFrameList());
return a;
}
public List<Integer> getFrameList()
{
return frame;
}
public List<GreenfootImage> getImages()
{
return images;
}
public int getFrames()
{
return frames;
}
public void setOwner(Content owner)
{
this.owner = owner;
}
public void setImages(List images)
{
this.images = images;
}
public void setFrameList(List<Integer> frame)
{
this.frame = frame;
}
public int getCurFrame()
{
return curFrame;
}
}import greenfoot.*;
import java.util.List;
import java.util.ArrayList;
public class EnemySpawner
{
private Game world;
private List<Enemy> enemys = new ArrayList();
private Counter c;
private int enemysPrMin = 10;
private int enemysTickDelay;
private List<Integer> moreEnemysScores = new ArrayList();
private List<Integer> moreEnemysAmount = new ArrayList();
private int frame;
public EnemySpawner(Game world)
{
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
enemys.add(new Enemy());
this.world = world;
c = world.getCounter();
enemysTickDelay = 3720/enemysPrMin;
}
public void act()
{
Enemy e = null;
for(int i = 0; i<enemys.size() && e == null; i++)
{
if(enemys.get(i).reset == true)
{
e = enemys.get(i);
}
}
for(int i = 0; i<moreEnemysScores.size() && c.getCount() != moreEnemysScores.get(i); i++)
{
if(c.getCount() == moreEnemysScores.get(i))
{
enemysPrMin += moreEnemysAmount.get(i);
enemysTickDelay = 3720/enemysPrMin;
moreEnemysScores.remove(i);
moreEnemysAmount.remove(i);
}
}
if(frame % enemysTickDelay == 0)
{
world.addObject(e, 910, 20+Greenfoot.getRandomNumber(560));
}
frame++;
if(frame == 600)
{
frame = 1;
}
}
public void addEnemysAt(int score, int amount)
{
moreEnemysScores.add(score);
moreEnemysAmount.add(amount);
}
}

