2016-05-08 9 views
0

現在、Box2dとLibgdxを使用している小さなゲームです。死んだhesのは、私は彼の体を削除すると、すべての敵はBOX2Dダイナミック体である、HESはそうkillable:私のプレーヤーでLibgdx/java式:m_type == b2_dynamicBody

  body.setUserData(null); 

      gameScreen.lightManager.world.destroyBody(body); 

が動作するし、私はそれが動作敵を殺す場合でも。しかし時々、このエラー例外で突然クラッシュします。

Program: C:\Program Files\Java\jre1.8.0_71\bin\javaw.exe 
File: /var/lib/jenkins/workspace/libgdx/extensions/gdx-box2d/gdx-  box2d/jni/Box2D/Dynamics/b2Body.cpp, Line 299 

Expression: m_type == b2_dynamicBody 

クラッシュする理由はありますか?そして表現は何を意味しますか? O.o

+0

に私はそれが、これは、接触イベント中にあるならば、それはおそらくあなたの原因となります、あなたは 'destroyBody'を呼び出しているときに依存してもよいと思いますエラー。 –

答えて

1

あなたは、ワールドステップ中にワールドから身体を取り除かないようにしなければなりません。このような状況は、あなたのアプリの非同期な場所でボディを削除するときに起こります。

あなたは、この状況を回避する最も簡単な方法は、身体に破壊することとworld.step()呼び出しの直後にそれらを破壊するために体を特定するいくつかのUserDataを設定することで、非同期処理を避けることができない場合 - その代わりにremove()のちょうど

body.setUserData("DESTROY"); 
を行います

してからrender方法

world.step(timestep, 3, 3); 

for(Body b : world.getBodies()) 
    if("DESTROY".equals(b.getUserData()) 
     world.destroyBody(body);