如何在 libGDX 中正确呈现泰语字体?
How do I properly render Thai font in libGDX?
我正在制作一个应用程序来帮助我记住我正在学习的一些泰语单词。
但是我无法正确呈现文本。
我用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 上注意到,当我关闭并重新打开项目时,实际代码从“ก”变为“?”。这可能是一个编码问题,但我不知道如何解决它。
我建议您使用 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();
我测试了它,它工作得很好。
我遇到了同样的问题。这不是您的代码或 libGdx 字体生成器有问题。字体生成器和 libgdx Freetype 扩展适用于 UTF-8 字符集,包括特殊字符。您只需要以 UTF-8 编码保存 属性 文件。
您可以使用任何其他文本编辑器以 UTF-8 编码保存 属性 文件,或者如果您使用的是 Android Studio,请转到 文件->设置->编辑器->文件编码。然后把"Default encoding for properties files"改成UTF-8.
然后您需要重新输入每个 属性 文件中的所有特殊字符。因为之前的编码弄乱了未知字符。
一切正常!
我正在制作一个应用程序来帮助我记住我正在学习的一些泰语单词。
但是我无法正确呈现文本。
我用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 上注意到,当我关闭并重新打开项目时,实际代码从“ก”变为“?”。这可能是一个编码问题,但我不知道如何解决它。
我建议您使用 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();
我测试了它,它工作得很好。
我遇到了同样的问题。这不是您的代码或 libGdx 字体生成器有问题。字体生成器和 libgdx Freetype 扩展适用于 UTF-8 字符集,包括特殊字符。您只需要以 UTF-8 编码保存 属性 文件。
您可以使用任何其他文本编辑器以 UTF-8 编码保存 属性 文件,或者如果您使用的是 Android Studio,请转到 文件->设置->编辑器->文件编码。然后把"Default encoding for properties files"改成UTF-8.
然后您需要重新输入每个 属性 文件中的所有特殊字符。因为之前的编码弄乱了未知字符。
一切正常!