文本未在 LibGdx Java 中显示



我正在尝试在我的程序中添加用于调试目的的文本。我在主类中调用播放器 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);
}

但是,当我运行该程序时,我只是得到我的正常屏幕,根本没有文本。我似乎无法弄清楚为什么这不起作用。任何帮助都非常感谢。

您发布的代码看起来没有任何问题,所以这里有一些想法;

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

bitmapFont.getData().setScale(3);

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

正如@Tenfour04所建议的,你应该尽量避免使用同一字体的多个实例,所以不要在Entity类中初始化你的字体,而是在你的主游戏中初始化它,并通过Entity构造函数传递它。我看不出这将如何解决您的问题,因为这纯粹是为了性能。

我犯了一个非常简单的错误,但从我发布的代码量来看,它很容易被遗漏。在我放的线上

batch.setTransformMatrix(cam.combined);

它应该替换为

batch.setProjectionMatrix(cam.combined);

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

最新更新