2013-08-19 2 views
1

나는 충돌시 몸체가있는 직사각형 벽돌을 제거해야하는 게임을 작성 중입니다.android andengine physics body crash application을 제거하십시오

코드 :

, 오류가 발생 * _physicsWorld.destroyBody의 (b) * 여기

내 코드 및 로그 캣의 출력 (로그 캣은 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)*** 

최대한 빨리 도와주세요. 감사합니다

+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

이 해결책을 얻었고, IUpdateHandler를 구현했으며 그 안에 내 delete 메소드를 실행합니다. –