我正在尝试处理射弹和敌人之间的碰撞。当射弹击中敌人时,它必须消失,但相反,游戏在接触的那一刻就崩溃了。我不知道如何解决这个问题
public class CollisionProcessing implements ContactListener {
World world;
public CollisionProcessing(World world) {
super();
this.world = world;
}
@Override
public void beginContact(Contact contact) {}
@Override
public void endContact(Contact contact) {}
@Override
public void preSolve(Contact contact, Manifold manifold) {}
@Override
public void postSolve(Contact contact, ContactImpulse contactImpulse) {
Fixture A = contact.getFixtureA();
Fixture B = contact.getFixtureB();
if (A == null || B == null) return;
if (A.getUserData() == null || B.getUserData() == null) return;
if (A.getUserData().equals(3)) {
System.out.println("Bullet Body collision");
A.getBody().setActive(false);
world.destroyBody(A.getBody());
}
if (B.getUserData().equals(3)) {
System.out.println("Body Bullet collision");
B.getBody().setActive(false); // this
world.destroyBody(B.getBody()); // and this commands cruch game when contact happens
}
}
我尝试过 world.destroyBody() 和 body.destroyFicture() 但没有帮助
您无法调用任何
destroy' functions in any of the **Box2D** callbacks as they occur in during the
World.step` 更新。
相反,在
postSolve
中将主体添加到列表中,并在下次调用 World.step
之前,迭代该列表并调用 destroyBody
。
迭代后不要忘记清除列表。