当使用SpriteBatch渲染图像时,ShapeRenderer的颜色停止工作。

4
我做了一个使用 ShapeRenderer 制作着色线条的游戏。这个效果非常好,但是当我开始导入图像后,着色线条突然变成黑色。更糟糕的是:当我使用背景时,线条根本就不显示,而且,我确信我按正确的顺序绘制了它们...
以下是导入和渲染图像的代码:
Constructor(){
    TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("data/texture.atlas"));
    AtlasRegion region = atlas.findRegion("path");
    Sprite sprite = new Sprite(region);
}

..........................................

@Override
public void render() {
    Gdx.gl.glClearColor(255, 255, 255, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    batch.begin();
    background.draw(batch); // drawing the background

    drawing.draw(); // drawing the lines
    drawObjects(); // drawing some pictures
    batch.end();
}

但是当我删除了用于渲染背景和图片的代码后,这些线条就会显示出来并呈现正确的颜色...
请帮忙!!
编辑:使用 ShapeRenderer 进行绘制看起来像这样(不必放所有内容):
public void draw() {
    shaperenderer.begin(ShapeType.Line);
    shaperenderer.setColor(Color.RED);
    shaperenderer.line(1, 1, 100, 100);
    shaperenderer.end();
}

drawObjects() 是否调用了 ShapeRenderer.begin() 方法?由于您的问题涉及到 ShapeRenderer,因此包含调用它的代码将会很有用... - P.T.
好的,我可以编辑它。但是请注意,如果我删除图像,它就可以正常工作! - SlowDeepCoder
1个回答

11

您不能嵌套依赖于OpenGL上下文的对象。具体来说,您正在将ShapeRenderer.begin()嵌套在SpriteBatch.begin()中。如果您将渲染更改为以下内容:

batch.begin();
background.draw(batch); // drawing the background
batch.end(); // end spritebatch context to let ShapeRenderer in

drawing.draw(); // drawing the lines (with ShapeRenderer)

batch.begin(); 
drawObjects(); // drawing some pictures
batch.end();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接