无法在LibGDX上同时绘制字体和舞台

时间:2018-10-20 11:36:52

标签: java libgdx

我试图绘制一个带有特定字体的舞台和一个字符串,但是当我绘制舞台时,该字符串消失了,但是图像却没有。我想这很简单,但是我不知道。我已经尝试过更改渲染顺序,但这似乎不是问题。任何帮助将不胜感激。

@Override
public void create() {

    stage = new Stage();
    Gdx.input.setInputProcessor(stage);
    batch = new SpriteBatch();
    textatlas = new TextureAtlas("Agorafunfa.txt");
    TextureAtlas.AtlasRegion a = textatlas.findRegion("spider");
    spider = new Sprite(a);
    img = new Texture("Captura.PNG");
    yesa = new BitmapFont(Gdx.files.internal("yesa.fnt"));
    font = "Escape Planet";
    img3 = new Texture("saturno.png");
    funciona = new BitmapFont(Gdx.files.internal("yesa.fnt"));
    starte = "Começar";
    opcoes = "Opções";
    Skin skin = new Skin();
    skin.addRegions(ta);
    final TextButton.TextButtonStyle tbs = new TextButton.TextButtonStyle();
    tbs.font = yesa;
    tbs.checked = skin.getDrawable("comecaversao2");
    tbs.up = skin.getDrawable("comeca");
    b = new TextButton("Começar",tbs);
    b.setHeight(250);
    b.setWidth(300);
    b.setPosition(-10, 50);
    b.addListener(new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
        }
    });
    stage.addActor(b);
    Gdx.input.setInputProcessor(stage);
}

public void render() {
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
    batch.draw(img,0,0);
    batch.draw(img3, 200,170, 250, 170);
    yesa.setColor(Color.WHITE);
    yesa.draw(batch,font,430,300);
    stage.draw();//if I comment this line, the string appears
    batch.end();
}

1 个答案:

答案 0 :(得分:0)

您在正确的轨道上,stage.draw()引起了问题。您在调用它之前没有关闭spritebatch。如果您查看Stage的源代码,您将看到它具有自己的spritebatch。绘制舞台之前,请致电batch.end()

在另一个已打开的批次中呈现一个批次将导致各种奇怪的行为,使您认为故障不在于该批次。


由于这些类型的问题现在经常出现,因此我检查了stage docs,有明确的信息表明它使用自己的批处理,您甚至可以使用构造函数stage(Viewport viewport, Batch batch)设置自己的批处理。如果使用该构造函数,则无需使用上述解决方案。但是,文档中并未提到需要关闭批次,即使在batch docs中也是如此。可能应该添加一些内容,这样我们才能避免出现同样的问题。

可能是thisthis的副本。