What do you think what is the best way to render and update entities?
Currently im using a world class to do this.
Links:
The code (from World.java):
List<Entity> entities = new ArrayList<Entity>();
public void render(GameContainer gc, Graphics g, Camera camera) {
// Draw background
background.draw(0 - camera.getX(), 0 - camera.getY(), 2100, 2100);
// Loop through all entities and render
for (int i = 0; i < entities.size(); i++) {
Entity entity = entities.get(i);
// A very long if... render only if visible
if (entity.getX() < player.getX() + ((gc.getWidth() / 2) + entity.getWidth() + 50) &&
entity.getX() > player.getX() - ((gc.getWidth() / 2) + entity.getWidth() + 50) &&
entity.getY() < player.getY() + ((gc.getHeight() / 2) + entity.getHeight() + 50) &&
entity.getY() > player.getY() - ((gc.getHeight() / 2) + entity.getHeight() + 50)) {
entity.render(gc, g);
}
}
}
public void update(GameContainer gc, int delta) {
// Loop through entities and update all time
for (int i = 0; i < entities.size(); i++) {
Entity entity = entities.get(i);
entity.update(gc, delta);
}
}
List<Entity> entities = new ArrayList<Entity>();
public void render(GameContainer gc, Graphics g, Camera camera) {
background.draw(0 - camera.getX(), 0 - camera.getY(), 2100, 2100);
for( Entity entity : entities ) {
if( entity.isVisible( player, gc )) {
entity.render( gc, g );
}
}
}
public void update(GameContainer gc, int delta) {
for( Entity entity : entities ) {
entity.update( gc, delta );
}
}
Entity.update()
should not modify the list, in place use:
private final List< Entity > toBeRemoved = new LinkedList<>();
public void update(GameContainer gc, int delta) {
toBeRemoved.clear();
for( Entity entity : entities ) {
if( entity.update( gc, delta )) {
toBeRemoved.add( entity );
}
}
entities.removeAll( toBeRemoved );
}
Entity.update()
return true when the entity need removal.