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

Posted

技术标签:

【中文标题】如何在 libGDX 中正确渲染泰语字体?【英文标题】:How do I properly render Thai font in libGDX? 【发布时间】:2016-04-04 21:36:06 【问题描述】:

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

但是我无法正确渲染文本。

我使用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 上,当我关闭并重新打开项目时,实际代码从“ก”变为“?”。这可能是编码问题,但我不知道如何解决。

【问题讨论】:

你确定 Garuda 有泰语字符吗? 我确定确实如此。它专为易于阅读的泰语字符而设计。我还将它添加到我在 Windows 中的字体中并输入了字符。更多信息可以在这里找到slice-of-thai.com/fonts/#garuda 【参考方案1】:

我建议您使用 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();

我测试了它,它工作得很好。

【讨论】:

感谢您的回复。嗯,我还在“?”在我的系统上。你在使用 Android Studio 吗?你能分享一下你的编码设置是设置 -> 编辑器 -> 文件编码吗? 更新了答案。我使用 IntelliJ IDEA 社区版 15.0.3。我的操作系统是 Windows 10,系统语言是俄语。 感谢您的帮助。我将主类和 .ttf 文件的编码从 windows-1251 更改为 UTF-8,现在两种渲染方法都可以工作。【参考方案2】:

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

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

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

应该一切正常!

【讨论】:

以上是关于如何在 libGDX 中正确渲染泰语字体?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 libgdx 的舞台上绘制位图字体?

如何在 Android 上正确显示泰语变音符号?

Libgdx 之BitmapFont 字体

libGDX 中的 TrueType 字体

在 LibGDX 中缩放位图字体

LibGDX 3d 模型纹理未正确渲染