android andengine удалить приложение для физического тела

Я пишу игру, в которой мне нужно удалить прямоугольный кирпич с телом при столкновении. Ошибка возникает на *_physicsWorld.destroyBody(b);*

Вот мой фрагмент кода и вывод 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();

}

Логкат:

***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)***

пожалуйста, помогите мне как можно скорее. спасибо


person jitesh adnani    schedule 19.08.2013    source источник
comment
@Jithesh .. Можно ли получить ответ на этот вопрос?   -  person Sushil    schedule 19.08.2013


Ответы (1)


Вы не можете удалять тела во время выполнения b2World::Step. Вы должны сохранить список тел, которые вы хотите удалить, и фактически удалить их при выходе из Step.

Пример (С++):

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

//after Step:
for (b2Body *b : m_bodiesToRemove):
    m_world->DestroyBody(b);
person Andrew    schedule 19.08.2013
comment
получил решение, я реализовал IUpdateHandler и внутри него я запускаю свой метод удаления. - person jitesh adnani; 19.08.2013