我正在制作一款World
的游戏。在此World
中有许多Units
。
问题源于World
服务于(除其他事项外)两个主要任务的事实:
Unit
,以便他们可以根据经过的时间更新其属性。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()
也遍历每个单元,导致嵌套迭代。但是,我不确定我应该如何继续进行“窝”&#34;这个,因为我只看到了一个问题22:每个单位实际上必须迭代其他每个单位,看看他们是否在他们的视线范围内。
对此一些新鲜的眼睛将不胜感激。
答案 0 :(得分:4)
可能有一些方法可以重构您的设计以避免嵌套。但最简单的解决方案可能是将旧学校用于外部和内部,或仅仅内部。不要使用迭代器,因为这里不允许嵌套循环。 getActors返回一个libGDX数组,所以只需通过索引
遍历它for (int i=0; i < stage.getActors().size; i++) {
//...etc --> use stage.getActors().items[i] ...