如何删除一个身体Box2dWeb的碰撞后(How do I remove a body in Box

2019-08-06 17:34发布

里面的更新功能,如果2个机构碰撞我想删除它们(或将其标记为需要删除,并在时间步骤结束删除)。 我将如何做到这一点?

在更新功能,我尝试

var bodyA = this.m_fixtureA.m_body;
...
bodyA.m_world.DestroyBody(bodyA);

然而,他们没有被删除。 看来,当我试图删除它们,this.IsLocked()设置为true。

Answer 1:

如果world.IsLocked()函数返回true,世界将不会删除机构。 和world.IsLocked()将同时在世界处于步返回true。 在步骤卸下身体可能造成的问题,所以碰撞后毁坏机构的正确的方法是在一个变量来注册它们,然后消灭他们完成步骤之后。

//Pseudo code:
var destroy_list = [];

// Your contact listener
var listener = function () {
  // Push the body you wish to destroy into an array
 destroy_list.push(body);
}

// The game interval function
var update = function () {
  // Destroy all bodies in destroy_list
  for (var i in destroy_list) {
    world.DestroyBody(destroy_list[i]);
  }
  // Reset the array
  destroy_list.length = 0;
}


文章来源: How do I remove a body in Box2dWeb after a collision