Java Slick2d |渲染的最佳方式&;更新 问题是:

Java Slick2d |渲染的最佳方式&;更新 问题是:,java,render,solution,slick2d,Java,Render,Solution,Slick2d,您认为渲染和更新实体的最佳方式是什么 目前我正在使用世界级的软件来完成这项工作 链接: 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(

您认为渲染和更新实体的最佳方式是什么
目前我正在使用世界级的软件来完成这项工作

链接:

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);
    }
}

代码(来自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 entities=new ArrayList();
公共虚空渲染(GameContainer gc、Graphics g、摄像头){
//画背景
background.draw(0-camera.getX(),0-camera.getY(),2100,2100);
//循环遍历所有实体并渲染
对于(int i=0;iplayer.getX()-((gc.getWidth()/2)+entity.getWidth()+50)&&
entity.getY()player.getY()-((gc.getHeight()/2)+entity.getHeight()+50)){
实体提交(gc,g);
}
}
}
公共无效更新(GameContainer gc,int delta){
//循环实体并随时更新
对于(int i=0;i

Entity.update()
当实体需要删除时返回true。

我在将新元素添加到列表实体时出错。请用一个完整堆栈错误打开一个新问题不要在更新无效时使用缩短的for循环。您将得到一个并发修改异常。@BenPoulson,谢谢,但为什么我可以在render方法中使用它?@HUNeater,因为当您仍在以该样式的for循环读取对象时,您不能对其进行更改。这就是为什么会出现并发修改异常。但是,在渲染循环中,您没有写入对对象的更改,因此没有错误。
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 );
}