如何在libgdx的舞台上绘制一个bitmapfont?

这是我在我的Libgdx游戏的关卡中的当前渲染方法。 我想在我的关卡的右上angular画一个BitmapFont,但是我得到的是一堆白色的盒子。

@Override public void render( float delta ) { Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); this.getBatch().begin(); //myScore.getCurrent() returns a String with the current Score font.draw(this.getBatch(), "Score: 0" + myScore.getCurrent(), 600, 500); stage.act(Gdx.graphics.getDeltaTime()); stage.draw(); this.getBatch().end(); } 

我想添加分数字体到某种types的演员,然后做一个scene.addActor(myScore),但我不知道如何做到这一点。 我遵循Steigert的教程来创build主要的游戏类,在AbstractLevel类中实例化场景的字体,然后通过此级别进行扩展。

到目前为止,我没有使用任何自定义字体,只是空的新的BitmapFont(); 使用默认的Arial字体。 后来我想用我自己更花哨的字体。

Solutions Collecting From Web of "如何在libgdx的舞台上绘制一个bitmapfont?"

尝试将font.draw移动到stage.draw之后。 将它添加到演员将是非常简单的,只需创build一个新的类和扩展演员像这样

 import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.Actor; public class Text extends Actor { BitmapFont font; Score myScore; //I assumed you have some object //that you use to access score. //Remember to pass this in! public Text(Score myScore){ font = new BitmapFont(); font.setColor(0.5f,0.4f,0,1); //Brown is an underated Colour } @Override public void draw(SpriteBatch batch, float parentAlpha) { font.draw(batch, "Score: 0" + myScore.getCurrent(), 0, 0); //Also remember that an actor uses local coordinates for drawing within //itself! } @Override public Actor hit(float x, float y) { // TODO Auto-generated method stub return null; } } 

希望这可以帮助!

编辑1:也尝试System.out.println(myScore.getCurrentScore()); 只是为了确保这不是问题。 你可以得到它返回一个浮点数或一个整数,当你做"Score:"+位它会把它变成一个string本身

那么在这种情况下,您可能需要先调用this.getBatch().end 。 喜欢这个:

 mSpriteBatch.begin(); mStage.draw(); mSpriteBatch.end(); //Here to draw a BitmapFont mSpriteBatch.begin(); mBitmapFont.draw(mSpriteBatch,"FPS",10,30); mSpriteBatch.end(); 

我不知道为什么,但它对我有用。

在开始绘画阶段之前,我已经通过closures批次来解决与白色框相似的问题。 那是因为stage.draw()开始另一个批处理,并且以end()结束的前一个批处理无效。

所以在当前的例子中,我将在绘制阶段之前移动this.getBatch()。end()

  ... font.draw(this.getBatch(), "Score: 0" + myScore.getCurrent(), 600, 500); this.getBatch().end(); stage.act(Gdx.graphics.getDeltaTime()); stage.draw(); } 

如果您正在使用Scene2D,请尝试使用舞台和演员。 无需编写长码,检查非常容易使用的MTX插件。 您可以创build出色的用户体验

http://moribitotechx.blogspot.co.uk/