gpt4 book ai didi

java - GdxRuntimeException : #iterator() cannot be used nested

转载 作者:行者123 更新时间:2023-11-30 06:52:40 24 4
gpt4 key购买 nike

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

问题源于 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:每个单元实际上都必须迭代所有其他单元以查看它们是否在它们的范围内视线范围。

对此有一些新鲜的看法将不胜感激。

最佳答案

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

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

关于java - GdxRuntimeException : #iterator() cannot be used nested,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38552244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com