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
您可能会得到不一致的结果,因为您正在混合SpriteBatch
和ShapeRenderer
上下文。 这两个都期望它们在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 }