libGDX开发教程(五)--优美字体的使用

http://blog.sina.com.cn/s/blog_dbc528b10101hppg.html

做Android开的同学经常会纠结怎么能使用一些漂亮的字体获取用户的芳心,如果你想实现这个目的,那么TTF字库就是必不可少的了。什么是TTF字库呢?可能许多不熟悉TTF字库的同学一看这么生疏的名字就被吓到了,不要担心,其实他并不可怕。所谓的TTF其实就是一种格式,就是类似这样,如“123.ttf”和 “123.txt”是一样的,“.txt”文档是保存文字的,而TTF就是保存字体的,就相当于Hiero生成的".fnt"文件一样。但是中文常用3500字,你总不能用hiero自己做吧,那怎么办呢?这其实微软早就解决这个问题了,它给我们提供了这个TTF字库,保存汉字字,方便我们使用。

Libgdx游戏引擎(1群):187378034

Libgdx游戏引擎(2群):148848483

Libgdx游戏引擎(3群): 79168470
Libgdx国内交流论坛 :
www.libgdx.net

 

1. 你不知道的FreeType !

 

大家可能奇怪为什么土豆会用这个标题,如果打包好的类我怎么可能找不到。很抱歉,API里面你找不到这个类,因为他是一个外加的扩展的包,如果你通过step-ui建立项目,默认是不加入这个包的,如果我们想使用的话,就需要手动导入,下面土豆就给大家介绍下导入的方法。

 

(1)打开解压好的0.9.8版的包,找到里面的extensions文件夹,打开后,进入gdx-freetype文件夹下面,找到 gdx-freetype.jar 和 gdx-freetype-natives.jar。

 

如图:

 

(2)扩展包导入

 

首先,核心代码项目,将 gdx-freetype.jar 复制并粘贴到核心代码项目的lib文件夹,然后将其添加到Referenced Libraries 库中。

其次,安卓项目,将 gdx-freetype.jar 复制并粘贴到 -android 项目的lib文件夹,然后将其添加到Referenced Libraries 库中。

最后,桌面项目,将 gdx-freetype-natives.jar 复制、粘贴到 -desktop 项目的lib文件夹中,然后加入到Referenced Libraries中。

 

如图:(步骤如下,因为加入方法相同,这里我就只贴一个图了)

 

 

(3)将 gdx-freetype 文件夹中,armeabi 和 armeabi-v7a 两个文件夹复制到 -android 项目中,替换掉原有的armeabi和armeabi-v7a文件夹。

如图:

 

对比图:
     

PS:可能大家会好奇这个libgdx.so是什么文件,为什么有Android设备就可以运行.TTF的文件了呢?而没有他就一直报错呢?下面土豆来简单解释下.so文件是怎么回事。

答:一般来说.so文件就是常说的动态链接库, 是C或C++编译出来的,在可执行文件装载时或运行时,由Android操作系统的程序来加载库。作为加载过程的一部分它负责解析外部引用(比如库)。在不同的系统上,可执行文件包含一个叫做import  directory的表,该表的每一项包含一个库的名字。根据表中记录的名字,装载程序所需要的库,然后将其加载到内存中,之后根据加载库后确定的库的地址更新可执行程序,更新后调用库中的函数或引用库中的数据。这就是.so文件的原理作用。

2.FreeTypeFontGenerator 类

 

API定义:TTF字体的发生器(生产者) ------  由于这个类在API里面没有写,其实 FreeTypeFontGenerator 和 Texture 是一样的,都只是一个容器,负责盛装“.ttf”的文件然后备用。

 

功能用途:负责保存和解析“.ttf”格式文件。  --------   这个和 Texture 类是一样的。 

 

使用方法:FreeTypeFontGenerator 一般都配合 FreeTypeBitmapFontData 来使用。如下图:


PS:这里特别声明一下,如果你是用上面土豆给的链接下载的TTF字体文件的话,使用的时候一定要将文件名改成"英文名.ttf",比图土豆使用的是“华文娃娃体.TTF”就需要将它改名为“Baby.TTF”,这是因为LibGdx读取文件的时候并不支持中文文件名,所以千万别拿来就用,否则这个报错就不应该了。

 

3.FreeTypeBitmapFontData 类

 

API定义:负责处理FreeTypeBitmapFontData的数据的 (加工者) ------  这个类在API里面也没有写

 

功能用途:负责处理FreeTypeGenerator的数据    ----------- 和 BitmapFontData 类似

使用方法:FreeTypeBitmapFontData fontData = freetypeGenerator.generateData( int Size, some Chinese String, false);

这里我简单介绍下上面这个类的几个参数和重要的成员变量,第一个是字号的大小,第二个是中文的字符串(即汉字,需要加引号),第三个翻转状态。

FreeTypeBitmapFontData 有一个重要成员变量 DEFAULT_CHARS , 它是作者Mario给我们封装好的基本英文字符打开FreeTypeBitmapFontData 你会看见如下图的变量赋值,这样即使".TTF"字库中没有英文字符,我们也可以输出英文字符的,因为作者已经给我们打包了。

如图:

4.简单的实例

 

这里土豆简单的写了一个例子,给大家做一下演示,例子比较简单,基本一看就懂,估计大家也是能学会的。

 

PS:关于  Key with name ‘****‘ is already in map 错误的原因,可能大家会碰见这个问题,这也是常见的问题,他是由于freetypeGenerator.generateData( int Size, some Chinese String, false);中” “some Chinese String ”参数不允许有重复字符出现,比如这句话“长的帅的人告白才叫告白”中“告白”2个字出现了2次,这是不允许的,generateData是不允许同样字符重复加载的,希望大家注意。

代码如下:

package com.potato;

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.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeBitmapFontData;
import com.badlogic.gdx.graphics.g2d.tiled.TileAtlas;
import com.badlogic.gdx.graphics.g2d.tiled.TileMapRenderer;
import com.badlogic.gdx.graphics.g2d.tiled.TiledLoader;
import com.badlogic.gdx.graphics.g2d.tiled.TiledMap;

public class Map implements ApplicationListener {
   private BitmapFont Font;

private FreeTypeFontGenerator Generator;

FreeTypeBitmapFontData fontData;

private SpriteBatch batch;

@Override
   public void create() {
       Generator = new FreeTypeFontGenerator(
               Gdx.files.internal("data/Baby.TTF"));

fontData = Generator.generateData(25, Generator.DEFAULT_CHARS
               + "长的帅人告白才叫,丑男那性骚扰。奋斗小土豆手机工作游戏室", false);// 这里需要把你要输出的字,全部写上,前提是不能有重复的字。

Font = new BitmapFont(fontData, fontData.getTextureRegion(), false);

Font.setColor(Color.RED);

batch = new SpriteBatch();

}

@Override
   public void 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 Fighting Potato: \n \n长的帅的人告白才叫告白,\n长的丑的         男人告白那叫性骚扰。", 50, 220);
       Font.draw(batch, "--------Var3D手机工作游戏室", 150, 90);

batch.end();
   }

@Override
   public void resize(int width, int height) {
   }

@Override
   public void pause() {
   }

@Override
   public void resume() {
   }
}

效果截图:(Var3D手机工作游戏室这个不是土豆的工作室,是交流群里面一个朋友的ID,不过这句话确实是他说的)

5.关于被喷

最近有一些看了土豆博客的朋友,都给了土豆一些很好的反馈和帮助,在这里一起感谢啦,你们让土豆觉得这世界上还是正常人多。

不过总有一些奇葩,有一个QQ叫“思念你的鱼”的2货,直接加我QQ骂我,第一句就带父带母骂,然后就说写的垃圾,接着就是说没有技术含量,都是不痛不痒的例子。

我想说我写个博客只是出于帮助学习libgdx的朋友,而且只是针对初学者,只是提供交流而已,你觉得我写的垃圾,那你可以来写,就像猫总说的“要饭的还嫌钱少”。

如果你有意见可以和我交流,提我爸妈做什么,你说例子粗浅,我不信你刚学libgdx的时候上来就先来个BOX2D 然后就直接 IOS开发,一些基础的例子写的难了,初学者怎么看懂,本来新知识就不是很好接受,例子难了就更难学了,每个例子土豆都写的简单知识讲解新知识,不关联别的,而且附上图文,就是让大家能看懂。

土豆写教程,很大一部分原因就是土豆当年学libgdx的时候没有什么像样的教程,都是从官方给的tests和Demo看过来的,其中艰辛不言而喻,当时我就特别希望有一个简单的教程,只讲方法实现,同时例子的代码能运行起来,这样才有兴趣学下去,可是当时没有,后来夜明孤星灯前辈出了教程给了土豆很多帮助,所以土豆一直也想写一个博客也做一下这样一件好事。和群里朋友聊了一下,大家都希望有一个新版本(0.9.8)的教程,毕竟新版本改了好多东西,以前的好多接口都废弃掉了,许多方法实现都改了,所以土豆才决定每天抽2个小时的时间写博客的。

这里,我想对大家说,土豆的博客只给初学者和libgdx入门的同学看的,如果你技术高,请自行忽视,土豆也没花钱请你看吧,虽然被喷,但是请大家相信,作为一个从东北来的小伙,我的心还是挺大的,一定会坚持写下去的,就群里像Var3D哥说的“你不是人民币,不可能人人都喜欢你”。

感谢群里面支持我的朋友:Var3D哥 、猫总、小Z、萝卜、菜鸟、影子、许集贤大神、成都-315大神等朋友的支持,是你们告诉土豆,这世界上还是正常人多,2B少。

TTF字库下载地址:http://www.cr173.com/soft/36990.html

 

TTF字库详细介绍地址:http://baike.baidu.com/view/1361555.htm

 

资料地址:http://www.badlogicgames.com/wordpress/?p=2300

源码下载:http://pan.baidu.com/s/1EGkt2

写在最后,有关于《优美字体的使用》的基本方法今天就介绍到这里了,下一篇是是关于libgdx框架中《动画类Animation》博文,我会介绍下Animation的使用。如果大家有什么问题可以加我QQ:316344618,一起讨论下。。PS:今天写的比较晚,已经凌晨3.00了,希望大家能多给予指点,帮助修改完善。

时间: 2024-10-10 20:17:27

libGDX开发教程(五)--优美字体的使用的相关文章

微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码

教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码 由于最近比较忙,这个教程没有连续上,我会尽量连载.书节上回,上次我介绍了代公众号调用接口的方法和SDK的使用.不少朋友也都加了QQ群(2489462

libGDX开发教程

46.Mesh与Shader (4/686)2014-09-23 21:25 45.概念小结 (0/512)2014-09-10 23:18 44.新版本Gradle详解(二) (5/938)2014-08-13 17:59 libGDX for Android 2 (5/1189)2014-08-09 14:43 43.新版本Gradle详解(一) (7/2575)2014-04-27 13:59 42.Input输入事件 (0/939)2014-04-25 14:08 41.中文输入 (7/

XAF应用开发教程(五)验证模块

数据验证是应用程序开发中使用频率最高的功能模块,本节详细介绍一下XAF中如何使用验证模块. XAF 验证模块内置了下面的一些验证规则: 验证规则类型 说明 RuleCombinationOfPropertiesIsUnique (RuleCombinationOfPropertiesIsUniqueAttribute) 要求多个属性的值组合在一起时是唯一的. RuleCriteria (RuleCriteriaAttribute) 要求满足指定的条件. 如:座机或手机必须填写一个. 条件为:坐机

Android OpenGL ES 开发教程 从入门到精通

From:http://blog.csdn.net/mapdigit/article/details/7526556 Android OpenGL ES 简明开发教程 Android OpenGL ES 简明开发教程一:概述 Android OpenGL ES 简明开发教程二:构造OpenGL ES View Android OpenGL ES 简明开发教程三:3D绘图基本概念 Android OpenGL ES 简明开发教程四:3D 坐标变换 Android OpenGL ES 简明开发教程五

[转]Android OpenGL ES 开发教程 从入门到精通

本文转自:http://blog.csdn.net/mapdigit/article/details/7526556 Android OpenGL ES 简明开发教程 Android OpenGL ES 简明开发教程一:概述 Android OpenGL ES 简明开发教程二:构造OpenGL ES View Android OpenGL ES 简明开发教程三:3D绘图基本概念 Android OpenGL ES 简明开发教程四:3D 坐标变换 Android OpenGL ES 简明开发教程五

公众号第三方平台开发 教程四 代公众号处理消息和事件

公众号第三方平台开发 教程一 创建公众号第三方平台 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取 公众号第三方平台开发 教程三 微信公众号授权第三方平台 公众号第三方平台开发 教程四 代公众号发起网页授权说明 公众号第三方平台开发 教程五 代公众号处理消息和事件 公众号第三方平台开发 教程六 代公众号使用JS SDK说明 另,感谢一下这个大虾的博客,这几篇东西都是在他的博文基础上完成的,他的博客里也有一些接口代码可以下载 微信开发系列

公众号第三方平台开发 教程六 代公众号使用JS SDK说明

公众号第三方平台开发 教程一 创建公众号第三方平台 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取 公众号第三方平台开发 教程三 微信公众号授权第三方平台 公众号第三方平台开发 教程四 代公众号发起网页授权说明 公众号第三方平台开发 教程五 代公众号处理消息和事件 公众号第三方平台开发 教程六 代公众号使用JS SDK说明 另,感谢一下这个大虾的博客,这几篇东西都是在他的博文基础上完成的,他的博客里也有一些接口代码可以下载 微信开发系列

Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密 前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到Url对接的设置: 点击[修改设置],可以进入到修改页面: 加密的方式一共有3种: 明文模式,即原始的消息格式 兼容模式,明文.密文将共存,正式发布的产品不建议使用(因为仍然包含了明文,达不到加密的效果) 安全模

Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK Senparc.Weixin.MP SDK已经涵盖了微信5.0的所有公共API,以及2013年10月29日升级之后大部分实用的接口. 整个项目的源代码以及已经编译好的程序集可以在这个项目中获取到:https://github.com/JeffreySu/WeiXinMPSDK 我们现在从无到有建立一个ASP.NET MVC项目,来看一下如何与微信进行对接(Webforms