光滑2D |渲染和更新的最佳方式



问题:

你认为渲染和更新实体的最佳方式是什么?
目前我正在使用一个世界级的来做这件事。

链接:

游戏(完成)

代码(来自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()不应该修改列表,在适当的地方使用:

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()在实体需要移除时返回true

相关内容

  • 没有找到相关文章

最新更新