【发布时间】:2016-07-24 12:52:28
【问题描述】:
我正在开发这款拥有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() 还会迭代每个单元,从而导致嵌套迭代。但是,我不确定我应该如何继续“取消嵌套”这个,因为我只看到了一个问题 22:每个单元实际上都必须迭代所有其他单元以查看它们是否在它们的范围内视线范围。
我们将不胜感激。
【问题讨论】:
-
只需使用传统的 for 循环而不是迭代器。