2013-08-19 36 views
1

我正在寫一個遊戲,在這個遊戲中我必須去除碰撞時身體的矩形磚。在出現的錯誤* _physicsWorld.destroyBody(B); *android andengine刪除物理碰撞應用程序

這裏是我的代碼片段和logcat的輸出(logcat的說,有錯誤libc中):

代碼

public void destroyBrick(IShape s, Body b, int i){ 

    PhysicsConnector facePhysicsConnector = _physicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(s); 

     _physicsWorld.unregisterPhysicsConnector(facePhysicsConnector); 

    _scene.unregisterTouchArea(s); 

    _scene.detachChild(s); 

    _physicsWorld.destroyBody(b); 

    System.gc(); 

} 

logcat的

***08-19 12:58:17.491: A/libc(29832): /home/denbi/src/android/AndEngineExtensions/AndEnginePhysicsBox2DExtensionNew/jni/Box2D/Dynamics/b2World.cpp:134: void b2World::DestroyBody(b2Body*): assertion "IsLocked() == false" failed 
08-19 12:58:17.501: A/libc(29832): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 29852 (UpdateThread)*** 

請儘快幫助我。 謝謝

+0

@Jithesh ..莫非得到這個問題的答案? – Sushil

回答

3

b2World::Step的執行過程中,您無法移除物體。您必須存儲要刪除的實體列表,並在Step退出時實際刪除它們。

例(C++):

//in contact handling: 
m_bodiesToRemove.push_back(my_body); 

//after Step: 
for (b2Body *b : m_bodiesToRemove): 
    m_world->DestroyBody(b); 
+0

可以舉一個例子代碼? –

+0

@jiteshadnani:看到我的編輯 – Andrew

+0

得到了d解決方案,我實現了IUpdateHandler,並在其中運行我的刪除方法。 –