ShapeRenderer LibGdx无法正常工作

时间:2016-05-30 16:12:57

标签: java libgdx

我不知道为什么ShapeRenderer对象没有在屏幕上画圆圈。我尝试修改代码以包含诸如更改投影矩阵和将shaperenderer对象的矩阵转换为批处理对象的建议,甚至在shaperenderer.begin()之前添加batch.end()。这是我的代码:

public void draw (Batch batch, float parentAlpha){
    super.draw(batch, parentAlpha);
    batch.end();
    shapeRend.setProjectionMatrix(batch.getProjectionMatrix());
    shapeRend.setTransformMatrix(batch.getTransformMatrix());
    float x = body.getWorldCenter().x;
    float y = body.getWorldCenter().y;
    shapeRend.translate(x, y, 0);


    shapeRend.begin(ShapeType.Filled);
    shapeRend.setColor(Color.RED);
    shapeRend.circle(0, 0, Constants.PLAYER_RADIUS);
    shapeRend.end();
    batch.begin();


}

除了Contants.player_radius = 0.2之外,我真的没有其他代码可以提供,这不应该有所作为。我有我的世界渲染器(Box2D物理),它是可见的但是shaperenderer圆圈不在那里。最初我没有放置translate函数,只是将x和y直接放入shapeRend.circle(x,y,r)方法调用中,但我只是测试了不同的方法。任何的意见都将会有帮助。感谢信。

2 个答案:

答案 0 :(得分:1)

@Override
public void create () {
    shapeRenderer = new ShapeRenderer();
    camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
}

@Override
public void render () {
     Gdx.gl.glClearColor(1, 1, 1, 1);
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
     Gdx.gl.glEnable(GL20.GL_BLEND);
     Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
     Gdx.gl.glDisable(GL20.GL_BLEND);

     shapeRenderer.setColor(Color.RED);
     shapeRenderer.begin(ShapeType.FilledCircle);
     shapeRenderer.filledCircle(25, 25, 25);
     shapeRenderer.end();
}

答案 1 :(得分:1)

对于可能对我的问题感到困惑的每个人,我感到很抱歉。我发现了什么是错的。问题是我正在使用一个不同的正交相机,它有一个投影矩阵,左下角是一个小方块。我没有将投影矩阵更改为较小的左角。

shapeRend.setProjectionMatrix(camera.combined);

批次的投影矩阵未配置到相机,这就是它失败的原因。

我不再使用shapeRenderer因为我相信使用纹理更好。感谢所有回答的人。