虽然在LibGDX中导致冻结/崩溃的语句?

时间:2013-08-15 21:41:36

标签: while-loop libgdx

我在基类级别的更新方法中有以下代码:

while(entities.iterator().hasNext()){
        if(entities.iterator().next() != null){
            entities.iterator().next().update();
            Gdx.app.log(Game.LOG, "Updated Entity "+entities.iterator().next().getName()+".");
        }
        else{
            Gdx.app.log(Game.LOG, "Could not update Entity.");
        }
    }

但是,此语句将在程序运行时冻结程序,并且必须强制关闭而不提供任何崩溃信息。我可以通过使用if语句而不是一段时间来停止冻结,但是,它只会更新数组中的第一个实体。

什么可能导致冻结,如何在不造成迭代的情况下循环迭代器?

1 个答案:

答案 0 :(得分:1)

不要多调用iterator()和next()方法。 iterator()方法将在每次调用时重置迭代器。 next()方法将在每次调用时获取下一个项目。而是使用这样的东西:

Iterator<T> iterator = entities.iterator();
while(iterator.hasNext()) {
    T entity = iterator.next();
    entity.update();
}

其中T应由您实体的类替换。

编辑,更容易使用语法糖:

for (T entity : entities) {
    entity.update();
}