5

Update 関数内で、2 つのボディが衝突した場合、それらを削除します (または、削除する必要があるとマークして、タイム ステップの最後に削除します)。どうすればこれを達成できますか?

更新機能で私が試します

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

ただし、それらは削除されません。それらを削除しようとすると、 this.IsLocked() が true に設定されているようです。

4

1 に答える 1

9

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;
}
于 2013-01-21T22:41:16.473 に答える