Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fonts 如何在libGDX中正确呈现泰语字体?_Fonts_Libgdx_Thai_Asianfonts - Fatal编程技术网

Fonts 如何在libGDX中正确呈现泰语字体?

Fonts 如何在libGDX中正确呈现泰语字体?,fonts,libgdx,thai,asianfonts,Fonts,Libgdx,Thai,Asianfonts,我正在制作一个应用程序来帮助我记住一些我正在学习的泰语单词 但是,我无法正确渲染文本 我曾经创建过一个基本场景。这就是我目前所拥有的 public class ThaiWords extends ApplicationAdapter { OrthographicCamera cam; SpriteBatch batch; BitmapFont thaiFont; @Override public void create () { FreeTypeFontGenerator gene

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

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

我曾经创建过一个基本场景。这就是我目前所拥有的

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);
}
}
对于测试,我只想显示“ก" 字符。上面的代码生成一个“?”符号

我直接从网站下载了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,请转到文件->设置->编辑器->文件编码。然后将“属性文件的默认编码”更改为UTF-8

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

比一切都好


你确定Garuda有泰文字符吗?我肯定有。它是专门设计的,便于阅读泰文字符。我还将它添加到Windows中的字体中,并键入了字符。更多信息可以在这里找到,谢谢你的回复。嗯,我仍然收到“?“在我的系统上。你在用安卓工作室吗?你能分享你的编码设置吗?请点击设置->编辑器->文件编码?更新答案。我使用IntelliJ IDEA社区版15.0.3。我的操作系统是Windows 10,系统语言是俄语。谢谢您的帮助。我将主类和.ttf文件的编码从windows-1251更改为UTF-8,现在这两种渲染方法都可以工作。