博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android LibGDX游戏引擎开发教程】第08期:中文字体的显示和绘制(下)
阅读量:4323 次
发布时间:2019-06-06

本文共 3011 字,大约阅读时间需要 10 分钟。

     在上一篇的文章中,我们介绍了Hiero这个非常好用工具的使用,但是LIbgdx的BitmapFont不支持多图,常用汉字

3500个,你总不能用hiero自己做吧,那怎么办呢?这其实微软早就解决这个问题了,它给我们提供了这个TTF字

库,保存汉字字,方便我们使用。

 

 

一、FreeType的使用

 

1、打开解压好的0.9.8版的包,找到里面的extensions文件夹

 

打开后,再点击进入gdx-freetype文件夹

 

找到gdx-freetype.jar 文件和armeabi、armeabi-v7a两个文件夹

 

2、找到之后,将gdx-freetype.jar文件和这两个文件夹下的libgdx-freetype.so文件复制粘贴到核心项目的libs文件夹中,如图所示:

其他的Jar包和so文件都是之前的项目必须要添加的。

 

3、可能大家会好奇这个libgdx.so是什么文件,为什么有就可以运行.TTF的文件了呢?而没有他就一直报错呢?

 
答:一般来说.so文件就是常说的动态链接库, 是C或C++编译出来的,在可执行文件装载或运行时,由Android操作系
统的程序来加载库。作为加载过程的一部分它负责解析外部引用(比如库)。在不同的系统上,可执行文件包含一个叫做import   directory的表,该表的每一项包含一个库的名字。根据表中记录的名字,装载程序所需要的库,然后将其加载到内存中,之后根据加载库后确定的库的地址更新可执行程序,更新后调用库中的函数或引用库中的数据。这就是.so文件的原理作用。
 
 
 
二、FreeTypeFontGenerator和FreeTypeBitmapFontData
 
 
1、FreeTypeFontGenerator用途
 
   负责保存和解析“.ttf”格式文件,一般都配合 FreeTypeBitmapFontData 来使用。如下图:
 
注意:
这里要特别注意一下,如果是你下载的是“中文名.ttf”,使用的时候一定要将文件名改成“英文名.ttf ”,这是
因为
LibGdx读取文件的时候并不支持中文文件名,否则会报错。
 
 
2、FreeTypeBitmapFontData用途
 
负责处理FreeTypeGenerator的数据,和 BitmapFontData 类似 。
 
      在FreeTypeBitmapFontData类有一个重要成员变量DEFAULT_CHARS ,它是作者给我们封装好的基本英文字符打开
FreeTypeBitmapFontData 你会看见如下图的变量赋值,这样即使".TTF"字库中没有英文字符,我们也可以输出英文字符的,因为作者已经给我们打包了。
注意:
freetypeGenerator.generateData( int Size, some Chinese String, false)方法中“some Chinese String ”参数不允许有重复字符出现,比如这句话“今天天气晴朗”中“天”字出现了2次,这是不允许的,generateData是不允许同样字符重复加载的,否则会报错 Key with name '****' is already in map希望大家注意。
 
 
三、实现效果图
 
 
四、详细代码编写
 
package com.example.mylibgdxfont03;import com.badlogic.gdx.ApplicationListener;import com.badlogic.gdx.Gdx;import com.badlogic.gdx.graphics.Color;import com.badlogic.gdx.graphics.GL10;import com.badlogic.gdx.graphics.g2d.BitmapFont;import com.badlogic.gdx.graphics.g2d.SpriteBatch;import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeBitmapFontData;public class MyGame implements ApplicationListener {	private BitmapFont font;	private FreeTypeFontGenerator generator;	private FreeTypeBitmapFontData fontData;	private SpriteBatch batch;	@Override	public void create() {		generator = new FreeTypeFontGenerator(Gdx.files.internal("testfont.ttf"));		fontData = generator.generateData(25, generator.DEFAULT_CHARS				+ "晚风把荣华吹散,名利是如此浅薄。—我一条寻水的鱼!", false);// 这里需要把你要输出的字,全部写上,前提是不能有重复的字。		font = new BitmapFont(fontData, fontData.getTextureRegion(), false);		font.setColor(Color.PINK);		batch = new SpriteBatch();	}	@Override	public void dispose() {		font.dispose();		generator.dispose();		batch.dispose();	}	@Override	public void render() {		Gdx.gl.glClearColor(1, 1, 1, 1);		Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);		batch.begin();		font.drawMultiLine(				batch,				"Hello Everyone: \n \n晚风把荣华吹散,\n名利是如此浅薄。",				50, 220);		font.draw(batch, "——我是一条寻水的鱼!", 150, 90);		batch.end();	}	@Override	public void resize(int width, int height) {	}	@Override	public void pause() {	}	@Override	public void resume() {	}}
freetypeGenerator
.
generateData
int
 
Size
,
 
some
 
Chinese
 
String
,
 
false
);
 
第一个参数
是字号的大小,第二个参数是中文的字符串(即汉字,需要加引号),第三个参数是翻转的状态。
 
 

 

转载于:https://www.cnblogs.com/jiangu66/p/3161548.html

你可能感兴趣的文章
第一节:ASP.NET开发环境配置
查看>>
sqlserver database常用命令
查看>>
rsync远程同步的基本配置与使用
查看>>
第二天作业
查看>>
访问属性和访问实例变量的区别
查看>>
Spring MVC 异常处理 - SimpleMappingExceptionResolver
查看>>
props 父组件给子组件传递参数
查看>>
【loj6038】「雅礼集训 2017 Day5」远行 树的直径+并查集+LCT
查看>>
十二种获取Spring的上下文环境ApplicationContext的方法
查看>>
UVA 11346 Probability 概率 (连续概率)
查看>>
linux uniq 命令
查看>>
Openssl rand命令
查看>>
HDU2825 Wireless Password 【AC自动机】【状压DP】
查看>>
BZOJ1015: [JSOI2008]星球大战starwar【并查集】【傻逼题】
查看>>
HUT-XXXX Strange display 容斥定理,线性规划
查看>>
mac修改用户名
查看>>
一道关于员工与部门查询的SQL笔试题
查看>>
Canvas基础
查看>>
[Hive - LanguageManual] Alter Table/Partition/Column
查看>>
可持久化数组
查看>>