里面的更新功能,如果2个机构碰撞我想删除它们(或将其标记为需要删除,并在时间步骤结束删除)。 我将如何做到这一点?
在更新功能,我尝试
var bodyA = this.m_fixtureA.m_body;
...
bodyA.m_world.DestroyBody(bodyA);
然而,他们没有被删除。 看来,当我试图删除它们,this.IsLocked()设置为true。
里面的更新功能,如果2个机构碰撞我想删除它们(或将其标记为需要删除,并在时间步骤结束删除)。 我将如何做到这一点?
在更新功能,我尝试
var bodyA = this.m_fixtureA.m_body;
...
bodyA.m_world.DestroyBody(bodyA);
然而,他们没有被删除。 看来,当我试图删除它们,this.IsLocked()设置为true。
如果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;
}