2013-08-19 50 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,并在其中运行我的删除方法。 –