libgdx – Group.draw中的ShapeRenderer渲染颜色错误

MyGroup

public class GShape extends Group{ private ShapeRenderer shape; public GShape() { super(); shape = new ShapeRenderer(); } @Override public void draw(SpriteBatch batch, float parentAlpha) { super.draw(batch, parentAlpha); shape.begin(ShapeType.Line); Gdx.gl10.glLineWidth(5); shape.setColor(1, 1f, 1f, 1f); shape.line(0, 0, 200, 100); shape.end(); } } 

主要

 public class GameControl implements ApplicationListener { private Stage stage; private GShape gShape; @Override public void create() { stage = new Stage(480,320,false); Texture t = new Texture(Gdx.files.internal("data/the200.png")); Image i = new Image(t); stage.addActor(i); gShape = new GShape(); stage.addActor(gShape); } @Override public void dispose() { } @Override public void render() { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); stage.draw(); // gShape.render(); } @Override public void resize(int width, int height) { } @Override public void pause() { } @Override public void resume() { } } 

形状的颜色不是白色的? 为什么?

http://nw7.upanh.com/b3.s38.d3/352dd792eb77ce6df204a7af47ae1ac6_55348087.cos.jpg?rand=0.19125773780979216

您可能会得到不一致的结果,因为您正在混合SpriteBatchShapeRenderer上下文。 这两个都期望它们在OpenGL中“存储”,以便在begin()end()调用之间进行维护。

在已经调用SpriteBatch begin()的上下文中调用Actor draw()方法,因此您需要在开始ShapeRenderer之前结束它。 (并且您需要在返回之前重新启动SpriteBatch

喜欢这个:

 @Override public void draw(SpriteBatch batch, float parentAlpha) { super.draw(batch, parentAlpha); batch.end(); // ** End the batch context shape.begin(ShapeType.Line); // .. draw lines ... shape.end() batch.begin(); // ** Restart SpriteBatch context that caller assumes is active }