如何在Processing中删除一个body

时间:2017-04-10 12:41:50

标签: processing

这应该很容易,但我可能会误解一些基本的东西。

我在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);

行给出了断言错误

我该如何纠正?这是因为我正在摧毁身体而不是摧毁椭圆或其他微妙的东西吗?

1 个答案:

答案 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中删除它们来破坏它们