GdxRuntimeException:#迭代器()不能嵌套使用



我正在开发这个有World的游戏。在这个CCD_ 2中有许多CCD_。

这个问题源于World服务于(除其他外)两个主要任务:

  1. 遍历每个Unit,以便它们可以根据经过的时间等更新其属性
  2. 找到每个Unit的潜在目标

World中,会发生以下情况:

for (Actor a : stage.getActors())
{
    a.draw(batch, 1);
    a.act(10);
    findTargets((Unit)a);
}

findTargets()的定义如下:

public ArrayList<Unit> findTargets(Unit source) {
    double sight = source.SIGHT;
    ArrayList<Unit> targets = new ArrayList<Unit>();
    for (Actor a : stage.getActors()) {
        Unit target = (Unit)a;
        if (!(target instanceof Unit))
            continue;
        if (target.equals(source)) continue;
        if (((Unit)target).getPos().dst(source.getPos()) < sight) {
            targets.add((Unit)target);
        }
    }
    return targets;
}

问题是显而易见的:findTargets()还对每个单元进行迭代,导致嵌套迭代。然而,我不确定我应该如何进行"取消嵌套",因为我只看到了一个问题22:实际上,每个单元都必须对其他单元进行迭代,看看它们是否在自己的视线范围内。

如果能对此有新的见解,我们将不胜感激。

可能有一些方法可以重构设计以避免嵌套。但最简单的解决方案可能是只使用老派的外循环和内循环,或者只使用内循环。不要使用迭代器,因为这里不允许使用嵌套循环。getActors返回一个libGDX数组,所以只需通过索引遍历它

for (int i=0; i < stage.getActors().size; i++) {
  //...etc --> use stage.getActors().items[i] ...

最新更新