如何在libGDX中正确渲染泰语字体?

时间:2016-04-04 21:36:07

标签: fonts libgdx thai asianfonts

我正在制作一个应用程序来帮助我记住我正在学习的一些泰语单词。

但是我无法正确呈现文本。

我用this example创建了一个基本场景。这是我到目前为止所做的。

public class ThaiWords extends ApplicationAdapter {

OrthographicCamera cam;
SpriteBatch batch;
BitmapFont thaiFont;

@Override
public void create () {

    FreeTypeFontGenerator generator;

    FreeTypeFontParameter parameter = new FreeTypeFontParameter();
    parameter.size = 18;
    parameter.characters = "ก";

    generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/garuda.ttf"));
    thaiFont = generator.generateFont(parameter);
    generator.dispose();

    batch = new SpriteBatch();

    cam = new OrthographicCamera();
    cam.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    cam.update();
}

@Override
public void render () {
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    batch.setProjectionMatrix(cam.combined);
    batch.begin();
    thaiFont.draw(batch, "ก", 0, 66);
    batch.end();
}

@Override
public void resize (int width, int height) {
    cam.setToOrtho(false, width, height);
}
}

为了测试,我只想显示“ก”字符。上面的代码产生一个“?”符号

我直接从libGDX directory下载了garuda.tff字体。

我真的不确定我错过了什么!我甚至试图在运行时生成一个位图,但这会产生一个空白屏幕。

任何建议都会很棒!

编辑:我注意到在Android Studio上,当我关闭并重新打开项目时,实际代码从“ก”变为“?”。这可能是一个编码问题,但我不知道如何解决它。

2 个答案:

答案 0 :(得分:2)

我建议你使用Stage和Label来渲染文字 在创建:

Stage stage = new Stage();
Label label = new Label("วรณ", new Label.LabelStyle(thaiFont, Color.YELLOW));
label.setPosition(200,10);
stage.addActor(label);

然后在渲染方法中:

stage.act(delta);
stage.draw();

我测试过它,效果很好。

enter image description here

答案 1 :(得分:1)

我遇到了同样的问题。这对您的代码和libGdx字体生成器没有任何问题。字体生成器和libgdx Freetype扩展适用于包含特殊字符的UTF-8字符集。您只需要以UTF-8编码保存属性文件。

您可以使用任何其他文本编辑器以UTF-8编码保存属性文件,或者如果您使用的是Android Studio,请转到文件 - >设置 - >编辑器 - >文件编码。然后将“属性文件的默认编码”更改为UTF-8

然后,您需要在每个属性文件上重新键入所有特殊字符。因为以前的编码弄乱了未知的字符。

比一切都行得正常!

enter image description here