在发生碰撞之前移除box2d对象

我有一个字符和项目之间的碰撞检测问题,都创建为box2d对象。 我想要做的是在人物击中物品之前删除物品或从碰撞方法中删除物品并弹开。 因此,我想要检测物品和角色何时相撞以获得物品效果。

目前来源如下:

mWorld.setContactListener( new ContactListener() { @Override public void endContact(Contact contact) { } @Override public void beginContact(Contact contact) { Body bodyA = contact.getFixtureA().getBody() ; Body bodyB = contact.getFixtureB().getBody() ; Box2DUserData dataA = (Box2DUserData) bodyA.getUserData() ; Box2DUserData dataB = (Box2DUserData) bodyB.getUserData() ; if( dataA.id == Box2DUserData.ID_ITEM ) { //mWorld.destroyBody(bodyA); //bodyA.setTransform(new Vector2( 0, 0 ), 0 ) ; bodyA.setActive(false ); } else if( dataB.id == Box2DUserData.ID_ITEM ) { //bodyB.getWorld().destroyBody(bodyB); //bodyB.setTransform(new Vector2( 0, 0 ), 0 ) ; //mWorld.destroyBody(bodyB); bodyB.setActive(false ); } } }); 

这个源工作正常,但碰撞检测后删除尸体。 所以我可以让角色漫步物品,角色碰到物品后停下来等一下。

我不确定是否应该使用World.setContactListener或其他方法,如果有人能够给我正确的方法或其他方法来检测碰撞,以及在实际碰撞之前从碰撞方法中移除物体的方法,我将不胜感激。

谢谢

最简单的方法是使用传感器代替Body。 传感器产生碰撞,但不是响应。 所以你打到时会通知你,但是英雄不会反弹。