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

TTF字库

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

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

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

gdx-setup-ui的使用

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

libgdx-chinese-1

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

运行界面如下:

libgdx-chinese-2

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

libgdx-chinese-3

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

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

libgdx-chinese-4

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

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

libgdx-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-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-7

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

写在最后

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

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

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

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

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

时间: 2025-01-17 05:01:31

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

android游戏开发框架libgdx的使用(十三)—TiledMap中的角色和角色移动

http://www.cnblogs.com/htynkn/archive/2012/01/13/libgdx_13.html 本文紧跟上文,地址:android游戏开发框架libgdx的使用(十二)—TiledMap地图的使用 地图我们创建好了接下来就是主角的出现.其实上文介绍了如何TiledMap和Stage的结合,角色的处理就简单了. 可以继承Actor类创建主角类,我就偷个懒,用Image代替. 编辑我们的TMX文件,添加一个对象层. 在主角要出现的地方加个形状 取名为play1 我们的

Android游戏框架Libgdx使用入门

转载自:http://blog.csdn.net/cping1982/article/details/6176191 Libgdx作者博客:http://www.badlogicgames.com/ Libgdx项目地址:http://code.google.com/p/libgdx/ Libgdx是一款支持2D与3D游戏开发的游戏类库,兼容大多数微机平台(标准JavaSE实现,能执行在Mac.Linux.Windows等系统)与Android平台(Android1.5以上就可以使用.Andro

(转)【D3D11游戏编程】学习笔记二十一:Cube Mapping及其应用之一:天空盒的实现

(注:[D3D11游戏编程]学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 这一节讨论有关纹理映射的进阶内容:Cube Mapping. 1. 简介 单从名字上,就大概可以看出点端倪了,翻译成中文为立方体映射,因此肯定跟立方体有关系.确实,Cube Mapping就是使用六张正方形的图片来进行纹理映射的.这六张图片分别对应了一个立方体中的六个面.由于这个立方体是轴对齐的,因此每个面可以用坐标系中的六个轴方向来惟

c# ZXing 二维码 支持中文

public class QRCode { public static Bitmap QR(string content) { Dictionary<EncodeHintType, object> hints = new Dictionary<EncodeHintType, object>(); hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");//解决中文异常 QRCodeWriter writer = new

Android游戏源代码合集(主要是AndEngine和Libgdx的)

近期在网络上看到有网友抱怨Android游戏源代码找不到,所以小弟收集了一些AndEngine和Libgdx的游戏源代码,以Eclipseproject的形式配置好环境,再陆续发出(某引擎避嫌,不在此列). 虽说这些游戏,主要是由Libgdx与AndEngine开发的源代码组成.但其实,能算游戏的,开源的,举凡有点价值的Android游戏源代码,小弟也会陆续收集(比方Replicaisland没用不论什么引擎,可代码有价值,所以这次也放进来了),更会在博客中一一给出. 只是,有两类游戏不在此列,

Android游戏源码合集(主要是AndEngine和Libgdx的)

近在网络上看到有网友抱怨Android游戏源码找不到,所以小弟收集了一些AndEngine和Libgdx的游戏源码,以Eclipse工程的形式配置好环境,再陆续发出(某引擎避嫌,不在此列). 虽说这些游戏,主要是由Libgdx与AndEngine开发的源码组成.但事实上,能算游戏的,开源的,举凡有点价值的Android游戏源码,小弟也会陆续收集(比如Replicaisland没用任何引擎,可代码有价值,所以这次也放进来了),更会在博客中一一给出. 不过,有两类游戏不在此列,一是游戏源码虽然乍看下

Android学习路线(二十一)运用Fragment构建动态UI——创建一个Fragment

你可以把fragment看成是activity的模块化部分,它拥有自己的生命周期,接受它自己的输入事件,你可以在activity运行时添加或者删除它(有点像是一个"子activity",你可以在不同的activity中重用它).本课将向你展示如何使用Support Libaray继承 Fragment 类来让你的应用能够兼容正在运行Android 1.6的设备. 提示: 如果你决定你的应用需求的最低API级别是11或者更高,那么你不需要使用Support Library,你可以直接使用

ActionScript3游戏中的图像编程(连载二十一,第1章完)

1.4.3 用灰度/明度指导色彩搭配 试着只通过调整不等于0的通道,让上一排的色彩在灰度上保持一致,把三个颜色分别代入到心理学公式.得 Gray(red) = r * 0.299      Gray(green) = g * 0.587      Gray(blue) = b * 0.114 让它们灰度相等,则 r * 0.299 = g * 0.587 = b * 0.114 可见,b值一定最大,不妨让b取最大值255,求得r=97, g=50.把这两个值分别应用到红和绿两个色块上. 绿色不再

ActionScript3游戏中的图像编程(连载二十一)

1.4.3 用灰度/明度指导色彩搭配 试着只通过调整不等于0的通道,让上一排的色彩在灰度上保持一致,把三个颜色分别代入到心理学公式.得 Gray(red) = r * 0.299 Gray(green) = g * 0.587 Gray(blue) = b * 0.114 让它们灰度相等,则 r * 0.299 = g * 0.587 = b * 0.114 可见,b值一定最大,不妨让b取最大值255,求得r=97, g=50.把这两个值分别应用到红和绿两个色块上. 绿色不再显得刺眼,整体感也因