Search code examples
javaandroidlinuxlibgdxbox2d

How can I remove in LibGDX bodys?


I can not destroy any bodys in LibGDX. I have already tried everything but I do not get it. Can someone give me an example?

Regards Timux

So here is the code where I try to remove the body object.

public class ObjectSpawner extends Timer {


public ObjectSpawner() {
    scheduleTask(new Task() {
        @Override
        public void run() {
            Objecte objecte = new Objecte(world);
            objecte.getBody().applyForceToCenter((float) (200 + Math.random() * 300), 0, true);
            worldController.objectArray.add(objecte);

            for (Iterator<Body> iter = world.getBodies(); iter.hasNext();) {
                Body body = iter.next();
                if(body!=null) {
                    world.destroyBody(body);
                    body.setUserData(null);
                    }
                }

            for(Objecte o : worldController.objectArray) {
                if(o.getBody().getPosition().y < camera.position.y) {
                    worldController.deleteBody(o.getBody());
                }
            }
        }
    }, 0, 0.5f);
  }
}

On the Internet I've seen that I can do with an iterator.

Iterator<Body> iter = world.getBodies()

But Android Studio underlines it red because the iterator wants an array and "world.getBodies ()" apparently is a void.


Solution

  • LibGDX bodys ? From box2d tag it's seems that you want to destroy box2d body.

    World world=new World(new Vector2(0,-9.8f),true);
    
    BodyDef bodyDef=new BodyDef();
    bodyDef.position.set(100,100);
    bodyDef.type= BodyDef.BodyType.DynamicBody;
    
    Body body =world.createBody(bodyDef);    // body created
    
    PolygonShape polygonShape=new PolygonShape();
    polygonShape.setAsBox(2,2);
    body.createFixture(polygonShape,1);
    
    world.destroyBody(body);   // body destroyed 
    

    EDIT

    getBodies() needs Body type Array as in argument so create and pass.

    Array<Body> bodies=new Array<Body>();
    
    world.getBodies(bodies);
    
    for (Body body: bodies){
         world.destroyBody(body);
    }