我尝试实现一个自定义Actor,它通过扩展Image来显示FrameBuffer的内容。在里面,我想使用ShapeRenderer进行绘制。
public class CustomActor extends Image {
private FrameBuffer frameBuffer = null;
private ShapeRenderer shapeRenderer = new ShapeRenderer();
private int width;
private int height;
public CustomActor() {
width = Gdx.graphics.getWidth();
height = Gdx.graphics.getHeight();
shapeRenderer.setAutoShapeType(true);
}
@Override
public void draw(Batch batch, float parentAlpha) {
if (frameBuffer == null) {
frameBuffer = new FrameBuffer(Pixmap.Format.RGB565, width / 2, height / 2, false);
TextureRegion textureRegion = new TextureRegion(frameBuffer.getColorBufferTexture());
textureRegion.flip(false, true);
setDrawable(new TextureRegionDrawable(textureRegion));
}
frameBuffer.begin();
// render content
Gdx.gl.glClearColor(0, 1, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(Color.WHITE);
shapeRenderer.rect(0, 0, frameBuffer.getWidth() / 2, frameBuffer.getHeight() / 2);
shapeRenderer.end();
if (frameBuffer != null) {
frameBuffer.end();
}
super.draw(batch, parentAlpha);
}
}
删除ShapeRenderer部分时,我可以看到场景中的绿色背景。但是一旦我使用ShapeRenderer,内容就是黑色。没有可见的白色矩形。
任何想法我做错了什么?
答案 0 :(得分:0)
刚刚发现在FrameBuffer end()之后使用我自己的SpriteBatch(带有begin()和end())它可以工作。所以这个问题似乎与FrameBuffers方法和SpriteBatches方法的调用顺序有关。在开始FrameBuffer之前结束给定的actor批处理并且“重新”开始它以绘制actor也是有效的(参见上面的评论)。