Java 从屏幕中删除ShaperEnder形状
我使用ShaperEnder(LibGDX)绘制了不同的形状,并将它们连接到Box2d世界实体上,使它们在重力作用下下落。我的问题是,一旦它们触底,如何将其从屏幕上删除???多谢各位 谢谢凯文的回复。也许我对我的问题不太清楚。我将放一段代码来帮助澄清我的问题: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
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中提供的。一旦你检测到碰撞,移除尸体。非常感谢阿披实克。如果我错了阿披实克,请纠正我。我从你的片段中了解到的是,把圆的连续存在放在粘在它上面的身体的存在上。因此,一旦身体从世界上移除,就不会再渲染形状。是吗?去吧!谢谢,伙计