最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How do I remove a body in Box2dWeb after a collision - Stack Overflow

programmeradmin3浏览0评论

Inside of the Update function, if 2 bodies collide I want to remove them (or mark them as needing to be removed, and remove them at the end of the time step). How would I acplish this?

In the Update function I try

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

However, they don't get deleted. It seems that when I am trying to delete them, this.IsLocked() is set to true.

Inside of the Update function, if 2 bodies collide I want to remove them (or mark them as needing to be removed, and remove them at the end of the time step). How would I acplish this?

In the Update function I try

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

However, they don't get deleted. It seems that when I am trying to delete them, this.IsLocked() is set to true.

Share Improve this question asked Jan 13, 2013 at 22:36 BoundlessBoundless 2,4642 gold badges26 silver badges40 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 9

The world will not remove bodies if the world.IsLocked() function returns true. And world.IsLocked() will return true while the world is in a step. Removing a body during a step could cause issues, so the correct way of destroying bodies after collisions is to register them in a variable and then destroy them after the step is pleted.

//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;
}
发布评论

评论列表(0)

  1. 暂无评论