Android 如何在libgdx中的后台绘制位图字体?

Android 如何在libgdx中的后台绘制位图字体?,android,game-engine,libgdx,stage,bitmap-fonts,Android,Game Engine,Libgdx,Stage,Bitmap Fonts,这是我在Libgdx游戏中的当前渲染方法。我试图在关卡的右上角画一个位图字体,但我得到的只是一堆白色框 @Override public void render( float delta ) { Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); this.getBatch().begin(); //myScore.g

这是我在Libgdx游戏中的当前渲染方法。我试图在关卡的右上角画一个位图字体,但我得到的只是一堆白色框

 @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();
        }
我想把乐谱字体添加到某种演员中,然后做一个场景。addActor(myScore),但我不知道怎么做。 我按照Steigert的教程创建了一个主游戏类,该类在AbstractLevel类中实例化了场景font,然后扩展到这个级别


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

尝试将font.draw移到stage.draw之后。将其添加到actor将非常简单,只需创建一个新类并像这样扩展actor

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())只是为了确保这不是问题所在。您可以让它返回一个float或int,当您执行
评分时:“+
位它将把它本身变成一个字符串,在这种情况下,您可能需要先调用
this.getBatch().end
。像这样:

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

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

如果您使用的是场景2D,请尝试使用舞台和演员。无需编写长代码,请检查MTX插件是否非常易于使用。你可以创造一个很棒的用户体验


我在开始绘图阶段之前关闭批次,解决了白盒的类似问题。这是因为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();
    }

谢谢这可能会奏效,但我发现了一个非常棒的实用程序,名为Label,它使用的正是我所需要的。我现在把这个标签作为我的分数,作为一名普通演员加入舞台。工作起来很有魅力。