使用“批处理”绘制的文本被使用“渲染器”

时间:2016-09-25 11:56:21

标签: java libgdx spritebatch

我刚刚开始使用LibGDX,我遇到了使用批处理的问题: 我的HomeScreen中有一个渲染方法,可以渲染屏幕上的所有内容,包括一些按钮。在我的班级按钮中,我渲染按钮,之后,我使用批处理来绘制文本。问题是文本是在按钮的矩形后面绘制的(即使批处理在矩形的渲染器之后开始)也不知道它是否清晰,所以这里有一些代码:

在Screen类中:

    public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    viewport.apply();
    vector3.set(Gdx.input.getX(), Gdx.input.getY(), 0);
    viewport.unproject(vector3);
    renderer.setProjectionMatrix(camera.combined);
    renderer.setAutoShapeType(true);
    renderer.begin(ShapeRenderer.ShapeType.Filled);
    homeStars.render(renderer);
    for (Button button: buttons)
    {
        button.render(renderer);
    }
    renderer.setColor(1,1,1,1);
    //realCursor = cursorToWorldPosition(Gdx.input.getX(),Gdx.input.getY());
    //renderer.circle((vector3.x+1)*Const.WORLD_WIDTH/2,(vector3.y+1)*Const.WORLD_HEIGHT/2,5);
    renderer.circle(vector3.x,vector3.y,5);
    renderer.set(ShapeRenderer.ShapeType.Line);
    for(HomeStar star : HomeStars.stars)
    {
        if(vector3.dst(star.position)<Const.MAX_DIST_MOUSE_STAR){
            renderer.line(vector3.x, vector3.y,star.position.x,star.position.y,Color.WHITE, Color.BLUE);
        }
    }
}

在Button类中:

    public void render(ShapeRenderer renderer){
    if (mouseOn() == true){
        renderer.rect(position.x-width/2,position.y-height/2,width, height, Color.BLACK, Color.VIOLET, Color.BLACK, Color.VIOLET);
    }
    else if (mouseOn() == false){
        renderer.rect(position.x-width/2,position.y-height/2,width, height, Color.BLACK, Color.GRAY, Color.BLACK, Color.GRAY);
    }
    batch.begin();
    font.draw(batch, "yo", position.x, position.y);
    batch.end();
}

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

您无法嵌套SpriteBatchShapeRenderer。确保在致电renderer.end()之前致电batch.begin(),然后在致电renderer.begin()后致电batch.end()

renderer.end();
batch.begin();
font.draw(batch, "yo", position.x, position.y);
batch.end();
renderer.begin();

因为你正在学习,所以现在应该这样做。但请注意,这会很快变得非常低效,因为它会破坏批处理的目的。您应该避免在ShapeRendererSpriteBatch之间不断切换。 SpriteBatch非常适合呈现矩形,因此您可能希望仅使用SpriteBatch作为按钮(或使用scene2作为UI)。