这应该很容易,但我可能会误解一些基本的东西。
我在box2d的屏幕上有椭圆(称为移动器)。椭圆由身体表示。身体有一个变量r,我用它来制作椭圆尺寸。 我想在r = 0时破坏椭圆。
这就是我写的:
for (int i = 0; i < movers.length; i++) {
if(movers[i].r<0){
box2d.destroyBody(movers[i].body);
}
}
然而,这在box2d.destroyBody(movers[i].body);
我该如何纠正?这是因为我正在摧毁身体而不是摧毁椭圆或其他微妙的东西吗?
答案 0 :(得分:0)
所以答案不是直观的,但是为了将来参考,问题是如果在世界时间步长内完成,那么当试图杀死尸体时,box2d会感到困惑。
这是什么意思?
这意味着您必须将所有正在使用的实体添加到arrayList而不是数组,并且您的代码应该可以使用它。如果你这样做,那么在void draw
的末尾你可以添加以下内容(其中movers是一个包含body的对象的arrayList,r是一个定义是否应该销毁一个body的属性):
for (int i = movers.size()-1; i >= 0; i--) {
Mover p = movers.get(i);
if (p.r<0) { //r is whatever attribute of your body
movers.remove(i);
}
}
这将通过从正在使用的arrayList中删除它们来破坏它们