【发布时间】:2014-04-19 15:01:08
【问题描述】:
我最近问了这个问题:Box2D - Can't destroy multiple fixtures,但发现这不是 Box2D 的问题,而是我的 java.lang.这是我的代码:
public static void removeSpecifiedBodies() {
for (Body body : bodiesToRemoveList) {
Array<Fixture> fixtures = body.getFixtureList();
for (Fixture fixture : fixtures) {
body.destroyFixture(fixture);
}
}
bodiesToRemoveList.clear();
}
我正在做的是遍历我的bodyToRemoveList 中的所有body。然后,每个主体都有多个固定装置,所以我得到所有固定装置并循环遍历它们,销毁每个固定装置。在这一切之后,我清除了bodyToRemoveList。但是,在我的第二个 for 循环中,当我销毁灯具时,只有一个被销毁。我做了一些调试,发现for循环只运行一次。我不确定为什么会这样。谷歌搜索显示其他人有这个问题,我注意到他们都从列表中删除或清除了项目,就像我正在做的那样。我认为我的代码没有问题,但由于某种原因,我尝试任何方法都无法修复它。有人看到我的代码有任何问题吗?提前致谢。
编辑:我是个白痴。感谢所有帮助过的人。这是我的代码,如果有人想看的话。
public static void removeSpecifiedBodies() {
Iterator<Body> i = bodiesToRemoveList.iterator();
while (i.hasNext()) {
Body desBod = i.next();
//body.destroyFixture(fixture);
WorldController.b2world.destroyBody(desBod);
i.remove();
}
bodiesToRemoveList.clear();
}
【问题讨论】:
-
bodyToRemoveList 中有多少个身体?
-
For-each 循环在 Java 中没有被破坏。我怀疑
destroyFixture()会修改您正在迭代的列表,从而导致问题。 -
看起来像这个名称不佳的“Array”类中的一个错误,或者可能在 Fixture 和包含它的 Array 之间存在某种联系。尝试将所有 Fixtures 复制到一个 ArrayList 中,然后循环遍历以销毁它们。