Java 从屏幕中删除ShaperEnder形状

Java 从屏幕中删除ShaperEnder形状,java,android,libgdx,box2d,Java,Android,Libgdx,Box2d,我使用ShaperEnder(LibGDX)绘制了不同的形状,并将它们连接到Box2d世界实体上,使它们在重力作用下下落。我的问题是,一旦它们触底,如何将其从屏幕上删除???多谢各位 谢谢凯文的回复。也许我对我的问题不太清楚。我将放一段代码来帮助澄清我的问题: BodyDef floorDef = new BodyDef(); floorDef.type = BodyDef.BodyType.StaticBody; floorDef.position.set(0f,0f); Polygo

我使用ShaperEnder(LibGDX)绘制了不同的形状,并将它们连接到Box2d世界实体上,使它们在重力作用下下落。我的问题是,一旦它们触底,如何将其从屏幕上删除???多谢各位

谢谢凯文的回复。也许我对我的问题不太清楚。我将放一段代码来帮助澄清我的问题:

BodyDef floorDef = new BodyDef(); 
floorDef.type = BodyDef.BodyType.StaticBody;  
floorDef.position.set(0f,0f);

PolygonShape floorShape = new PolygonShape();
floorShape.setAsBox(Gdx.graphics.getWidth(),10f); 
floor = world.createBody(floorDef); 
floor.createFixture(floorShape, 1f); 

BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.position.set(Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2);
body = world.createBody(bodyDef);

CircleShape shape = new CircleShape();
shape.setPosition(new Vector2(0f,0f));
shape.setRadius(80f);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
fixtureDef.density = 0.5f;
body.createFixture(fixtureDef);

world.setContactListener(new ContactListener() {

            @Override
            public void beginContact(Contact contact) {

                if((contact.getFixtureA().getBody() == body &&
                        contact.getFixtureB().getBody() == floor)
                        ||
                        (contact.getFixtureA().getBody() == floor &&
                                contact.getFixtureB().getBody() == body)) {
                    Colliding = true;
                    collisionSound.play(1.0f);

                }

            }

            @Override
            public void endContact(Contact contact) {


                if((contact.getFixtureA().getBody() == body || contact.getFixtureB().getBody() == body)) {

                    world.destroyBody(body);

                    Colliding = false;

                }
            }

            @Override
            public void postSolve(Contact arg0, ContactImpulse arg1) {

            }

            @Override
            public void preSolve(Contact arg0, Manifold arg1) {

            }
        });

        // Shape is the only disposable of the lot, so get rid of it
        shape.dispose();

        floorShape.dispose();
    }


  @Override
    public void render(float delta) {

        Gdx.gl.glClearColor(1f, 1f, 1f, 1f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        world.step(Gdx.graphics.getDeltaTime(), 6, 2);

        stage.act(Gdx.graphics.getDeltaTime());

        stage.draw();

        shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
        Gdx.gl20.glLineWidth(10);
        shapeRenderer.setColor(Color.CHARTREUSE);
        shapeRenderer.rect(floor.getPosition().x,floor.getPosition().y,Gdx.graphics.getWidth(),10f);
        shapeRenderer.end();
        shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
        Gdx.gl20.glLineWidth(10);
        shapeRenderer.setColor(Color.FOREST);
        shapeRenderer.circle(body.getPosition().x ,body.getPosition().y ,80f);
        shapeRenderer.end();

    }

因此,我想删除由ShaperEnder创建的形状,该形状在星号之间突出显示。

从屏幕中删除ShaperEnder形状->我们没有添加任何内容,因此没有删除的概念。就像我们在物理世界中添加身体一样,我们可以从物理世界中移除身体

我们在屏幕上画形状,所以不知怎的,我必须停止那个绘图部分。 我的ShapeRenderer形状是view,它的模型是Box2d body,所以在Box2d body到达底部时移除该body

private Array<Body> array;

@Override
public void create(){         //create or show depending on who is parent
    array=new ArrayList<Body>();
}

@Override
public void render(float delta) {

    ....
    world.getBodies(array);
    for (Body body:array){
        if(body.getType()== BodyDef.BodyType.DynamicBody) { // I've to draw only circle
            shapeRenderer.circle(body.getPosition().x ,body.getPosition().y ,80f);
        }
    }
} 
私有数组;
@凌驾
public void create(){//根据父对象创建或显示
数组=新的ArrayList();
}
@凌驾
公共无效渲染(浮动增量){
....
世界。GetBodys(数组);
for(主体:数组){
如果(body.getType()==BodyDef.BodyType.DynamicBody){//我只需要画一个圆
圆(body.getPosition().x,body.getPosition().y,80f);
}
}
} 

到达底部时移除该主体。您真的在使用JBox2D吗?如果是这样,我建议您使用libGDX-box2D绑定,它具有更好的集成度和性能。感谢Abishek的回复。事实上,我从世界上移除了身体,但事实上我将形状的位置归因于它下落时的身体位置,因此从世界上移除身体与形状的存在无关。感谢mgsx-dev。很抱歉,我使用的是LibGDX-Box2d。您可以使用名为“ContactListener”的东西检测与地面的碰撞这是在libgdx中提供的。一旦你检测到碰撞,移除尸体。非常感谢阿披实克。如果我错了阿披实克,请纠正我。我从你的片段中了解到的是,把圆的连续存在放在粘在它上面的身体的存在上。因此,一旦身体从世界上移除,就不会再渲染形状。是吗?去吧!谢谢,伙计