2017-07-21 10 views
1

私はタワーディフェンスのゲームを作成しています。私はたくさんの投射物を作っていると思っています。しかし、私の発射体は、衝突検出のためのBodyフィールドとFixtureを持っています。発射物にfree()を呼び出すと、そのボディは世界に残っています。 Box2d/Libgdxボディをプールするオブジェクト

は、だから私はworld.destroyBody()を使用してボディを破壊しようとしたが、それは私が明示的に私のオブジェクト like I learned here.フラグを立てることにより、world.stepの外にそれをしなかった場合を除き、NULLポインタエラーを引き起こしていた。しかし、その後、私は そのメソッドを実装しようとしたとき体を破壊するために、破壊されている物体が発射体が解放されたときと一致していなかったので、誤りがあった。

PoolableオブジェクトとBodiesを使用してメモリを管理する最善の方法は何ですか?

答えて

1

ボディを削除して再作成する代わりに、プール可能オブジェクトのリセットメソッドをオーバーライドすることで、ボディを遠くに保存することができます。

@Override 
public void reset(){ 
    body.setTransform(new Vector2(-50,-50), 0); 
    body.setLinearVelocity(0, 0); 
    body.setActive(false); 
} 
+0

ありがとう、私はうまくいくと思います! body.setActive()を使用して身体の衝突を発砲から守ることができないことに気づいていなかったので、もっとスムーズに作業することができます。本当にありがとう。 –

関連する問題