I'm creating a game and it's pretty much a top down shooter kind of like space invaders.
Well, I am currently handling the removal of entities from a linked list in an enhanced for loop and as we all know we cant just add stuff to a list and take away stuff from a list at the same time.
I keep getting the following error:
conccurentModificationException
My question is how can I efficiently handle the addition and removal of entities from a Linked-list without getting an error.
Here is my World Class
package game;
import java.awt.Graphics;
import java.util.LinkedList;
import data.Guns;
import entity.Beast;
import entity.Entity;
import entity.Player;
import entity.Projectile;
import external.ImageLoader;
import handlers.Handler;
public class World {
private Player player;
private Handler handler;
// List of all Game Entities
public static LinkedList<Entity> gameFools = new LinkedList<Entity>();
// Constructor for World , this is created once the Game State is instantiated
public World(Handler handler) {
this.handler = handler;
// The player is the first entity added to the list of course
player = new Player(handler, null, Guns.tier1, 64, 64, 400, 900, 500, 5, 0, 0);
gameFools.add(player);
}
public void update() {
// Randomly spawns in a new beast npc
if ((int) (Math.random() * 100) == 0) {
gameFools.add(new Beast(handler,
ImageLoader.loadImage("C:\\Users\\Michael\\workspace\\TopDown\\res\\badguys\\mig1.png"), 32, 32,
(int) (Math.random() * 700 + 50), 50, 10, 1, -1, -1, false, false, false, false, false));
}
//This is the for loop that is used to remove entitys from the linked list
for (Entity e : gameFools) {
// If the object is not within the screen, it gets removed
if (e.getY() <= 0) {
gameFools.remove(e);
}
// Once the Projectiles Range is up, it is removed
if (e.isProjectile()) {
if (((Projectile) e).getRange() <= 0 ) {
gameFools.remove(e);
}
}
e.update();
}
System.out.println("Current Objects entities in game " + gameFools.size());
}
// Getters and Setters
public void render(Graphics g) {
for (Entity e : gameFools) {
e.render(g);
}
}
public Player getPlayer() {
return player;
}
public void setPlayer(Player player) {
this.player = player;
}
public Handler getHandler() {
return handler;
}
public void setHandler(Handler handler) {
this.handler = handler;
}
}