我需要摧毁一个身体后碰撞在JBox2D安卓游戏。我发现当身体接触时,JBox2D世界就会被锁定。我想在碰撞后摧毁其中一具身体。我能在世界释放锁后再打给我吗?我找到了一个选项,就是把身体加入一个阵列来摧毁它。但是什么时候销毁身体呢?我不会在这个游戏中使用am引擎/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.
}发布于 2014-04-09 11:11:30
我相信问题是,在碰撞回调过程中,你试图移除身体。
来自Box2D手册:
实现游戏逻辑是很有诱惑力的,这种逻辑改变了物理世界中的联系回调。例如,您可能会发生碰撞,造成损坏,并试图破坏相关的参与者及其刚体。但是,Box2D不允许您在回调中更改物理世界,因为您可能破坏Box2D当前正在处理的对象,从而导致孤立的指针。
也就是说,你不应该破坏碰撞回调内部的身体。
您应该在更新周期之后使用World reference存储对您希望销毁的机构的引用。
这就是你需要的吗?
https://stackoverflow.com/questions/22958877
复制相似问题