android - 碰撞时摧毁 body JBox2D android

标签 android box2d game-physics jbox2d

我需要在 JBox2D Android 游戏中碰撞后摧毁其中一个物体。我发现当 body 接触时,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.

}

最佳答案

我认为问题在于您试图在碰撞回调期间移除主体。

来自 Box2D 手册:

It is tempting to implement game logic that alters the physics world inside a contact callback. For example, you may have a collision that applies damage and try to destroy the associated actor and its rigid body. However, Box2D does not allow you to alter the physics world inside a callback because you might destroy objects that Box2D is currently processing, leading to orphaned pointers.

也就是说,您不应该在碰撞回调中销毁实体。

您应该存储对要销毁的实体的引用,并在更新周期后使用世界引用销毁它们。

这是您所需要的吗?

关于android - 碰撞时摧毁 body JBox2D android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22958877/

相关文章:

android - 当我单击 fragment B 的发送按钮时如何将 arrayList 传递给 fragment C

c++ - 在 box2d 中实现 "begin contact"

java - box2d body 穿过其他 body

javascript - 使用 Physi.js 进行玩家运动/物理

java - 如何组合多个 if (stringname.equals ("value"))?

android - 使用隐式 Intent 启动 Activity ?

java - FloatingActionButton黑框

c++ - box2d 迭代

javascript - 如何计算球碰撞墙壁时的坐标?

ios - 在spritekit中模拟水/在水上制作 Sprite "float"