• android游戏开发框架libgdx的使用(二十一)—使用TTF字库支持中文


    TTF字库

    TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,随着windows的流行,已经变成最常用的一种字体文件表示方式,应用范围非常广。

    如果是Windows操作系统,可以从Fonts文件夹中找到很多字库。也可以从网上下载。

    我推荐YaHei.Consolas字库,看着很爽,反正我的eclipse就是用的这个字库。

    gdx-setup-ui的使用

    从libgdx下载0.96版本,可以看到文件结构如下:

    libgdx-chinese-1libgdx-chinese-1

    强烈运行gdx-setup-ui.jar,这一个项目初始化工具。

    运行界面如下:

    libgdx-chinese-2libgdx-chinese-2

    项目名字,包名什么的按情况填写。在中间的Required配置中可以直接下载最新的稳定版本和Nightly版本。不过推荐选用本地的附件。

    libgdx-chinese-3libgdx-chinese-3

    不用解压,直接选择zip文件,它会自动抽取需要的文件。

    我使用的Eclipse,直接Import即可。

    libgdx-chinese-4libgdx-chinese-4

    我只生成了桌面项目,一般可以把Android和Web的一起生成了。

    注意一下,默认的Android项目对应的SDK是15,可以根据需要更改。有时候导入的项目会有红色感叹号,添加一个assets文件夹即可。

    libgdx-chinese-5libgdx-chinese-5

    其中back-libgdx项目是我们的核心,一切逻辑什么的都在这里实现。back-libgdx-XXX是对应的启动而已。

    libgdx使用TTF字库

    准备一个TTF字库改名为font.ttf复制到assets文件夹。从压缩包中找到gdx-stb-truetype-natives.jar和gdx-stb-truetype.jar。其中gdx-stb-truetype-natives.jar添加到桌面项目,gdx-stb-truetype.jar添加到核心项目中去。如图:

    libgdx-chinese-6libgdx-chinese-6

    现在来看看最关键的方法TrueTypeFontFactory.createBitmapFont。

    我们通过它创建一个支持ttf字库的BitmapFont出来。它需要一个FileHandle和要支持的文字。当然还有一些参数,具体意义可以参考API文档。

    也就是说我们需要使用TTF字库的哪些文字必须声明出来。不过问题也不到,3500常用汉字基本可以满足要求。网上还有一个常用500字,不过那个完全不够用。

    我这里随便写几个作为演示。



    1
    public static final String FONT_CHARACTERS = "世界人民爱好的美好中文支持再看看";


    然后使用初始化



    1
    2
    3
    font = TrueTypeFontFactory.createBitmapFont(
    Gdx.files.internal("font.ttf"), FONT_CHARACTERS, 12.5f, 7.5f,
    1.0f, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());


    剩下的工作和使用Hiero一样的了。



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    public class App implements ApplicationListener {
    BitmapFont font;
    SpriteBatch batch;
    public static final String FONT_CHARACTERS = "世界人民爱好的美好中文支持再看看";
     
    @Override
    public void create() {
    font = TrueTypeFontFactory.createBitmapFont(
    Gdx.files.internal("font.ttf"), FONT_CHARACTERS, 12.5f, 7.5f,
    1.0f, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    font.setColor(1f, 0f, 0f, 1f);
    batch = new SpriteBatch();
    }
     
    @Override
    public void dispose() {
    font.dispose();
    }
     
    @Override
    public void render() {
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    batch.begin();
    font.draw(batch, "中文支持", 10, 10);
    batch.end();
    }
     
    @Override
    public void resize(int width, int height) {
    }
     
    @Override
    public void pause() {
    }
     
    @Override
    public void resume() {
    }
    }


    效果如下:

    libgdx-chinese-7libgdx-chinese-7

    在Stage中使用TTF字库原理是一样,需要修改的只有BitmapFont的实例化方法。

    写在最后

    使用TTF字库解决libgdx显示中文无疑是一种很好的选择,基本不存在显示不出文字的情况。但是TTF字库的大小一般都比较大,比如我使用的字库是13.8M..小一点的也有3M。

    对于Android应用这个大小有时候还是难以接受的。

    android系统自带的字库位于/system/fonts/中,可以使用绝对路径访问…不过不推荐就是了。

    使用Herio是一个高效(程序效率,不是开发效率)的方法,但是libgdx不支持Herio的多图。

    有文档提到了使用SpriteSheetPacker,但是我一直没有找到。google code的代码自从迁移到Github之后就没有了,不知道是移除了还是怎么的了。

  • 相关阅读:
    【bzoj3158】千钧一发 最小割
    【bzoj2186】[Sdoi2008]沙拉公主的困惑 欧拉函数
    【bzoj1221】[HNOI2001] 软件开发 费用流
    【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛
    【bzoj4916】神犇和蒟蒻 杜教筛
    【bzoj3944/bzoj4805】Sum/欧拉函数求和 杜教筛
    【bzoj4869】[Shoi2017]相逢是问候 扩展欧拉定理+并查集+树状数组
    【bzoj3926】[Zjoi2015]诸神眷顾的幻想乡 广义后缀自动机
    【bzoj2555】SubString 后缀自动机+LCT
    【bzoj3277/bzoj3473】串/字符串 广义后缀自动机
  • 原文地址:https://www.cnblogs.com/tonny-li/p/4146796.html
Copyright © 2020-2023  润新知