2013-01-13 30 views
5

Bên trong chức năng Cập nhật, nếu 2 đối tượng va chạm tôi muốn xóa chúng (hoặc đánh dấu chúng là cần xóa và xóa chúng ở cuối bước thời gian) . Làm thế nào tôi sẽ thực hiện được điều này?Làm cách nào để xóa nội dung trong Box2dWeb sau khi va chạm

Trong chức năng Cập nhật tôi cố gắng

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

Tuy nhiên, họ không được xóa. Có vẻ như khi tôi cố xóa chúng, this.IsLocked() được đặt thành true.

Trả lời

9

Thế giới sẽ không xóa thân nếu hàm world.IsLocked() trả về giá trị true. Và world.IsLocked() sẽ trả về true trong khi thế giới đang ở trong một bước. Loại bỏ một cơ thể trong một bước có thể gây ra vấn đề, do đó, cách chính xác để phá hủy các cơ quan sau khi va chạm là đăng ký chúng trong một biến và sau đó tiêu diệt chúng sau khi bước hoàn tất.

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

Bạn có thể thay thế: 'while (destroy_list.length) world.DestroyBody (destroy_list.pop()); ' –

+0

Đó là một lựa chọn tốt. Tôi không muốn sử dụng trong khi vòng lặp để giảm thiểu cơ hội của các vòng vô hạn. – forsvunnet

Các vấn đề liên quan