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;
}