2013-01-13 15 views
5

Güncelleştirme işlevinin içinde, 2 gövde çakışıyorsa bunları kaldırmak istiyorum (veya kaldırılması gerektiğinde işaretleyin ve zaman adımının sonunda bunları kaldırın) . Bunu nasıl başarabilirim? Güncelleme fonksiyonunda Bir çarpışmadan sonra Box2dWeb'deki bir gövdeyi nasıl kaldırırım

Ben Ancak, bunlar silinmiş alamadım

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

deneyin. Onları silmek çalıştığımda, this.IsLocked() true olarak ayarlanmış gibi görünüyor.

cevap

9

world.IsLocked() işlevi true değerini döndürürse, dünya gövdeleri kaldırmaz. Ve dünya bir adımda iken world.IsLocked() true döndürür. Bir adımda bir gövdenin çıkarılması sorunlara neden olabilir, bu nedenle çarpışmalardan sonra vücutları tahrip etmenin doğru yolu onları bir değişkene kaydetmek ve ardından adım tamamlandıktan sonra imha etmektir.

//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

yerine yapabileceğini: 'iken (destroy_list.length) world.DestroyBody (destroy_list.pop()); iyi bir alternatiftir' –

+0

. Sonsuz döngüler olasılığını en aza indirmek için döngüler kullanırken kullanmamayı tercih ederim. – forsvunnet

İlgili konular