我试图绘制一个带有特定字体的舞台和一个字符串,但是当我绘制舞台时,该字符串消失了,但是图像却没有。我想这很简单,但是我不知道。我已经尝试过更改渲染顺序,但这似乎不是问题。任何帮助将不胜感激。
@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();
}
答案 0 :(得分:0)
您在正确的轨道上,stage.draw()
引起了问题。您在调用它之前没有关闭spritebatch。如果您查看Stage的源代码,您将看到它具有自己的spritebatch。绘制舞台之前,请致电batch.end()
。
在另一个已打开的批次中呈现一个批次将导致各种奇怪的行为,使您认为故障不在于该批次。
由于这些类型的问题现在经常出现,因此我检查了stage docs,有明确的信息表明它使用自己的批处理,您甚至可以使用构造函数stage(Viewport viewport, Batch batch)
设置自己的批处理。如果使用该构造函数,则无需使用上述解决方案。但是,文档中并未提到需要关闭批次,即使在batch docs中也是如此。可能应该添加一些内容,这样我们才能避免出现同样的问题。