ジョイントで接続された複数のボディで構成されるオブジェクトを破棄すると、アプリケーションがエラーなしでクラッシュします。もちろん、私はいくつかの調査を行い、物理エンジンがステップを計算している間にボディを破壊すると、これが発生することを発見しました. そのため、ボディをリストに追加して onUpdate() で破棄しましたが、それは役に立ちませんでした。面白いことに、単純なボディの破棄は onUpdate() の外部でも魅力的に機能し、クラッシュを引き起こすことはありません。
エラー出力はありませんでしたが、問題は World.java の 507 行目の NullPointerException であるというメッセージをなんとかキャッチできました。驚いたことに、次のことがわかりました。
public boolean isLocked()
{
return jniIsLocked( addr );
}
誰かが何が起こっているのか教えてもらえますか? 私は死体を一度に 1 つずつ破壊することさえしました。
if (!destroyList.isEmpty()){
Body b = destroyList.get(0);
destroyList.remove(0);
mPhysicsWorld.destroyBody(b);
}
問題は解決しません。
注: 私が破壊しようとしているオブジェクトは、WeldJoints によって 1 つの中心ボディに接続された複数のボディで構成されています。体が重なっているので、負の 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)
...