当我破坏一个由多个通过关节连接的物体组成的物体时,我的应用程序崩溃而没有错误。当然,我做了一些研究,发现当物理引擎计算步数时破坏物体时会发生这种情况。所以我只是将实体添加到列表中并在 onUpdate() 中销毁它们,但这并没有帮助。有趣的是,即使在 onUpdate() 之外,破坏简单的实体也很有效,而且从未导致崩溃。
没有错误输出,就在我设法捕捉到一个说问题是 World.java 中的 NullPointerException 的第 507 行时。令人惊讶的是,我发现了以下内容:
public boolean isLocked()
{
return jniIsLocked( addr );
}
有人能告诉我会发生什么吗?我什至一次摧毁尸体:
if (!destroyList.isEmpty()){
Body b = destroyList.get(0);
destroyList.remove(0);
mPhysicsWorld.destroyBody(b);
}
但问题仍然存在。
注释:我要破坏的对象是由几个通过 WeldJoints 连接到一个中心体的物体组成的。身体重叠,所以我使用负 groupIndex 来防止它们相互碰撞。在移除之前移除与特定身体相关的所有关节并没有帮助。错误输出:
05-31 15:32:02.486: W/dalvikvm(927): JNI WARNING: JNI method called with exception raised
05-31 15:32:02.497: W/dalvikvm(927): in Lcom/badlogic/gdx/physics/box2d/World;.jniStep (JFII)V (CallBooleanMethodV)
05-31 15:32:02.497: W/dalvikvm(927): Pending exception is:
05-31 15:32:02.506: I/dalvikvm(927): Ljava/lang/NullPointerException;:
05-31 15:32:02.526: I/dalvikvm(927): at com.badlogic.gdx.physics.box2d.World.contactFilter(World.java:507)
05-31 15:32:02.526: I/dalvikvm(927): at com.badlogic.gdx.physics.box2d.World.jniStep(Native Method)
05-31 15:32:02.536: I/dalvikvm(927): at com.badlogic.gdx.physics.box2d.World.step(World.java:298)
...