我需要在JBox2D安卓游戏中摧毁一个身体的碰撞。我发现JBox2D世界在身体接触时变得锁定。我想在碰撞后摧毁一个身体。世界发布锁定后,我可以收到任何回电吗?我找到了一个选项,可以将主体添加到数组中以进行销毁。但何时摧毁身体?我在这个游戏中没有使用andengine / libgdx。找到下面的碰撞监听器类,
private class CollisionListener implements ContactListener {
@Override
public void beginContact(Contact contact) {
Object fixtureA = contact.getFixtureA().getUserData();
Object fixtureB = contact.getFixtureB().getUserData();
Body mBodyA = contact.getFixtureA().getBody();
Body mBodyB = contact.getFixtureB().getBody();
if (fixtureA instanceof Bullet) {
destroyBalloonBody(mBodyB);
}
if (fixtureB instanceof Bullet) {
destroyBalloonBody(mBodyA);
}
}
@Override
public void endContact(Contact contact) {
}
@Override
public void postSolve(Contact contact, ContactImpulse contactImpulse) {
}
@Override
public void preSolve(Contact contact, Manifold manifold) {
}
}
public void destroyBalloonBody(Body balloon){
//Can i start a new thread which is having a loop until the world become release for destroying the body
//Or
//Do i need to add the body to a deletionArrayList to destroy it.
}
答案 0 :(得分:2)
我认为问题是你在碰撞回调期间试图移除身体。
来自Box2D手册:
实施改变物理世界的游戏逻辑很诱人 在联系人回调中。例如,您可能发生了碰撞 应用伤害并试图摧毁相关的演员及其僵硬 身体。但是,Box2D不允许你改变物理世界 在回调中,因为你可能会破坏Box2D所在的对象 目前处理,导致孤儿指针。
也就是说,你不应该破坏碰撞回调中的物体。
你应该存储你想要销毁的物体的引用,并在更新周期后使用World引用将它们销毁。
这是你需要的吗?