【发布时间】:2023-03-29 14:23:01
【问题描述】:
当我破坏一个由多个通过关节连接的物体组成的对象时,我的应用程序崩溃而没有错误。当然,我做了一些研究,发现当物理引擎计算步数时破坏物体时会发生这种情况。所以我只是将实体添加到列表中并在 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)
...
【问题讨论】:
-
只破坏关节是否还有问题?您也可以查看 World.java:507 :)
-
第三次,是的,我已经尝试破坏关节。我还查看了 World.java:507。两者都写在问题中:-)
-
问题是“在移除之前移除与特定身体相关的所有关节没有帮助”。我在问你是否尝试过只破坏关节(并留下尸体)。
-
我明白了。我还没有尝试过。我希望这将毫无问题地工作,因为在关节被破坏后引擎崩溃了很长时间(就计算机而言)。
-
我刚刚试过,移除所有关节不会导致崩溃。
标签: android box2d andengine native-code physics-engine