如何使用Libgdx/Java绘制文本?

2022-09-01 05:17:12

我一直在谷歌搜索如何使用Libgdx绘制简单的2D文本。以下是我到目前为止整理的代码:

SpriteBatch spriteBatch;
BitmapFont font;
CharSequence str = "Hello World!";
spriteBatch = new SpriteBatch();
font = new BitmapFont();

spriteBatch.begin();
font.draw(spriteBatch, str, 10, 10);
spriteBatch.end();

该代码确实绘制了Hello World字符串,但是,它搞砸了我的所有其他绘图。他们在那里,只是被残酷地肢解,然后移动等等。我已经尝试了几乎所有语句子集。Gdx.gl11.glPushMatrix()Gdx.gl11.glPopMatrix()

我已经将残缺的图纸缩小到呼叫,如果将其删除,一切正常(但当然没有文本)。font.draw()


答案 1

我看不出为文本绘制创建单独的批处理的理由。使用 gdxVersion = '1.4.1' (在 Android Studio 中使用 gradle 构建),代码可以成功绘制文本:

BitmapFont font = new BitmapFont(); //or use alex answer to use custom font

public void render( float dt )
  {
    batch.setProjectionMatrix(camera.combined); //or your matrix to draw GAME WORLD, not UI

    batch.begin();

    //draw background, objects, etc.
    for( View view: views )
    {
      view.draw(batch, dt);
    }

    font.draw(batch, "Hello World!", 10, 10);

    batch.end();
  }

请注意,在这里你绘制游戏世界坐标,所以如果你的角色移动(例如在平台游戏中),文本也会移动。如果你想看到文本,它将在屏幕上修复,比如 Label/TextField 或它在不同的 UI 框架中的调用方式,那么我建议使用 Stage(和 TextArea 作为文本),请参阅例如如何使用 Stage:http://www.toxsickproductions.com/libgdx/libgdx-basics-create-a-simple-menu/


答案 2

当我创建位图字体时,它是这样的:

font = new BitmapFont(Gdx.files.internal("Calibri.fnt"),Gdx.files.internal("Calibri.png"),false);

尝试通过下载一些字体文件(下载字体时请检查.fnt文件和.png文件是否包含相同的文件)


推荐