在上一篇的文章中,我们介绍了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);
 
第一个参数
是字号的大小,第二个参数是中文的字符串(即汉字,需要加引号),第三个参数是翻转的状态。
 
 

【Android LibGDX游戏引擎开发教程】第08期:中文字体的显示和绘制(下)的更多相关文章

  1. 【Android LibGDX游戏引擎开发教程】第07期:中文字体的显示和绘制(上)

    在字体的显示和绘制中,Libgdx的作者(Mario Zechner,美国人)给我们提供了一个非常好用的工具 ——Hiero,那么下面就来看看它具体的使用方法. 一.Hiero工具的使用 1.Hier ...

  2. 【Android LibGDX游戏引擎开发教程】第06期:图形图像的绘制(下)图片整合工具的使用

    在上一篇文章中,我们提到了图片必须是2的n次方的问题.但是随着Libgdx的不断完善和发展,使用一些工具就 可以很好的解决了这样一个问题,但是它的功能又不仅仅只限于此,那么下面就来让我们看看Textu ...

  3. 基于libgdx游戏引擎开发的飞天猫

    闲来没事学学游戏,这是鄙人第一个小游戏——飞天猫 1,基于Android开发的小游戏,至少Android2.2以上的系统. 2,界面简洁,美观,游戏易操作,上手快. 3,可以左右摇摆手机来改变飞天猫的 ...

  4. libgdx游戏引擎教程

    第一讲:libgdx游戏引擎教程(一)性能优良的游戏引擎—libgdx http://www.apkbus.com/android-57355-1-1.html 第二讲: libgdx游戏引擎教程(二 ...

  5. 或许您还不知道的八款Android开源游戏引擎

    很多初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于iPhone下有诸如Cocos2d-iphone之类的免费游戏 ...

  6. [转载]或许您还不知道的八款Android开源游戏引擎

    或许您还不知道的八款Android开源游戏引擎         分类:             技术文章              2010-08-04 20:27     17430人阅读     ...

  7. Android 2D游戏引擎AndEngine配置环境

    Android 2D游戏引擎AndEngine配置环境 1.2  配置环境 在任何编程中,都需要一些软件或者硬件的支持.否则,没有硬件软件是不可能存在的,而想要编写对应语言的的程序,这需要对应语言库和 ...

  8. 【Cocos2d-x游戏引擎开发笔记(25)】XML解析

    原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/9128819 XML是一种非常重要的文件格式,由于C++对XML的支持非常完善 ...

  9. 推荐一些好用的 HTML5 & JavaScript 游戏引擎开发库

    推荐一些好用的 HTML5 & JavaScript 游戏引擎开发库 0. 引言 如果你是一个游戏开发者,并且正在寻找一个可以与 JavaScript 和 HTML5 无缝工作的游戏引擎.那么 ...

随机推荐

  1. oracle获取字符串长度函数length()和hengthb()

    原文:oracle获取字符串长度函数length()和hengthb() lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算s ...

  2. iscroll4实现轮播图效果

    相信很多人和我一样,在使用iscroll的是时候只知道可以手动滑动,不知道iscroll的轮播怎么实现一下就是我做的一个轮播效果,亲测有效: 1.html,当然可以动态添加下面的小圆点 <div ...

  3. php-fpm介绍及配置

    php-fpm是什么 全称是php fastcgi process manager即php fastcgi进程管理器,相比fastcgi静态的唤起cgi,fpm能根据访问的压力动态的唤起cgi进程和销 ...

  4. Linq to NHibernate入门示例

    Linq to NHibernate入门示例 NHibernate相关: 09-08-25连贯NHibernate正式发布1.0候选版 09-08-17NHibernate中一对一关联的延迟加载 09 ...

  5. Oracle数据库面试题

    1.取出表中第31到40行的记录 mysql方案:select * from t order by id limit 30,10 oracle方案: select t2.* from (select ...

  6. ibatis提示Unable to load embedded resource from assembly "Entity.Ce_SQL.xml,Entity".

    原本以为是xml文件配置错误,尝试无果,最终原因未将xml文件的生成操作选择为嵌入的资源.很无语!

  7. ASP.NET MVC Model元数据

    ASP.NET MVC Model元数据(三) 前言 在上篇中我们大概的讲解了Model元数据的生成过程,并没有对Model元数据本身和详细的生成过程有所描述,本篇将会对详细的生成过程进行讲解,并且会 ...

  8. Tomcat过滤器模拟

    直接上代码Filter.java public interface Filter { //过滤器 public void doFilter(Request request,Response respo ...

  9. Android手机外置SD卡(TF卡)的获取方法

    Android手机上的外置SD卡,起初的时候,即在Android出世的前几年,那时手机的存储是十分有限的,不像现在到处可见16G.32G和64G的存储,因而那时候的手机有的厂商允许插入外置的SD卡,此 ...

  10. 构建日均千万PV Web站点1

    如何构建日均千万PV Web站点 (一) 其实大多数互联网网站起初的网站架构都是(Linux+Apache+MySQL+PHP). 不过随着时代的发展,科技的进步.互联网进入寻常百姓家的生活.所谓的用 ...