• 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。
     
    如图:
     
    libGDX开发教程(五)--优美字体的使用
     
    (2)扩展包导入
     
    首先,核心代码项目,将 gdx-freetype.jar 复制并粘贴到核心代码项目的lib文件夹,然后将其添加到Referenced Libraries 库中。
     
    其次,安卓项目,将 gdx-freetype.jar 复制并粘贴到 -android 项目的lib文件夹,然后将其添加到Referenced Libraries 库中。
     
    最后,桌面项目,将 gdx-freetype-natives.jar 复制、粘贴到 -desktop 项目的lib文件夹中,然后加入到Referenced Libraries中。
     
    如图:步骤如下,因为加入方法相同,这里我就只贴一个图了
     
    libGDX开发教程(五)--优美字体的使用

     
    (3)将 gdx-freetype 文件夹中,armeabi 和 armeabi-v7a 两个文件夹复制到 -android 项目中,替换掉原有的armeabi和armeabi-v7a文件夹。
     
    如图:
     
    libGDX开发教程(五)--优美字体的使用
    对比图:
    libGDX开发教程(五)--优美字体的使用     libGDX开发教程(五)--优美字体的使用

     
     
    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 来使用。如下图:
    libGDX开发教程(五)--优美字体的使用
    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"字库中没有英文字符,我们也可以输出英文字符的,因为作者已经给我们打包了。
     
    如图:
    libGDX开发教程(五)--优美字体的使用

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

    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: 长的帅的人告白才叫告白, 长的丑的         男人告白那叫性骚扰。", 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,不过这句话确实是他说的
     
    libGDX开发教程(五)--优美字体的使用libGDX开发教程(五)--优美字体的使用
     
    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://pan.baidu.com/s/1EGkt2
     
    写在最后,有关于优美字体的使用》的基本方法今天就介绍到这里了,下一篇是是关于libgdx框架中《动画类Animation》博文,我会介绍下Animation的使用。如果大家有什么问题可以加我QQ:316344618,一起讨论下。。PS:今天写的比较晚,已经凌晨3.00了,希望大家能多给予指点,帮助修改完善。
  • 相关阅读:
    【灵感】wifi通过wifi发送优惠信息
    Web 通信 之 长连接、长轮询(long polling)
    深入了解 Dojo 的服务器推送技术
    浅谈TCP优化
    非IE内核浏览器支持activex插件
    树莓派安装 Nginx + PHP7.0 + Pi Dashboard
    ChartView与LineSeries搭配实现曲线局部缩放功能
    QT开发(十二)——QT事件处理机制
    QT源码之Qt信号槽机制与事件机制的联系
    详解 QT 源码之 Qt 事件机制原理
  • 原文地址:https://www.cnblogs.com/tonny-li/p/4146808.html
Copyright © 2020-2023  润新知