文本未显示在LibGdx Java中

时间:2016-05-24 07:25:27

标签: java libgdx

我正在尝试在程序中添加用于调试目的的文本。我在主类中调用了这样的调试器debugDraw方法:

public void create () {

    //Initialize essentials
    cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    cam.setToOrtho(false);

    rend = new ShapeRenderer();
    rend.setAutoShapeType(true);

    batch = new SpriteBatch();



    // Initialize Entities
    player = new Player(new Vector2(100, 100), new Vector2(100,100));
    enemy = new Enemy(new Vector2(100, 100), new Vector2(100,10));
}

@Override
public void render () {
    //Update player
    player.update();
    //Update camera then set matrix of batch
    cam.update();
    batch.setTransformMatrix(cam.combined);

    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    // ShapeRenderer begin
    rend.begin();
    player.render(rend);
    enemy.render(rend);
    rend.end();
    // ShapeRenderer end

    // SpriteBatch begin
    batch.begin();
    player.renderDebugText(batch);
    batch.end();
    // SpriteBatch end

}

这是实体类,它是播放器的父类:

 public Entity(Vector2 coords, Vector2 dims){
    //Assign constructors
    position = coords;
    dim = dims;

    //For debugging purposes of all entities
    debugText = new BitmapFont();
    debugText.setColor(Color.WHITE);
}


public void renderDebugText(SpriteBatch batch){
    debugText.draw(batch, "Vel.x: " + vel.x, 100, 100);

}

然而,当我运行该程序时,我只是得到了我的普通屏幕,没有任何文字。我似乎无法弄清楚为什么这不起作用。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您发布的代码没有立即出错,所以这里有一些想法;

默认BitmapFont是15pt,如果这是在15px高度绘制的话,那么如果你强制你的游戏达到高分辨率(如全高清),它可能会非常小。我目前的项目是全高清,我使用的字体看起来恰好是45px,所以你可以尝试按比例缩放3或4倍。在初始化字体后使用它;

bitmapFont.getData().setScale(3);

您的Camera也应该具有虚拟/视口尺寸,因此如果您强制使用特定分辨率,则应该传入虚拟尺寸。

正如@ Tenfour04建议的那样,你应该尽量避免使用相同字体的多个实例,所以不要在Entity类中初始化你的字体,而是在主游戏中初始化它并将其传递给{{1构造函数。我无法看到这将如何解决您的问题,因为这纯粹是为了表现。

答案 1 :(得分:0)

我犯了一个非常简单的错误,但是从我发布的代码中,很容易错过。在我放的行

batch.setTransformMatrix(cam.combined);

应该替换为

batch.setProjectionMatrix(cam.combined);

然后所有的错误消失了,对不起,我不知道为什么花了这么长时间才弄明白。谢谢你的帮助!