天天看点

Android游戏框架libgdx——BitmapFont的构造

转自:http://www.cnblogs.com/wangvsa/archive/2013/02/04/2891467.html

BitmapFont用来渲染bitmap字体。

一、构造BitmapFont需要两个文件:

  1.fnt文件

  这个文件用来描述字体,其内容大致如下:

Android游戏框架libgdx——BitmapFont的构造
info  size=70 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=0,0
common lineHeight=78 base=62 scaleW=512 scaleH=512 pages=1 packed=0
page id=0 file="loadingFont.png"
chars count=188
char id=32   x=0     y=0     width=0     height=0     xoffset=0     yoffset=62    xadvance=13     page=0  chnl=0 
char id=166   x=0     y=0     width=6     height=75     xoffset=5     yoffset=2    xadvance=15     page=0  chnl=0 
char id=124   x=6     y=0     width=6     height=75     xoffset=6     yoffset=2    xadvance=15     page=0  chnl=0 
char id=253   x=12     y=0     width=24     height=62     xoffset=1     yoffset=15    xadvance=26     page=0  chnl=0 
char id=221   x=36     y=0     width=25     height=62     xoffset=2     yoffset=1    xadvance=28     page=0  chnl=0       
Android游戏框架libgdx——BitmapFont的构造

  文件描述了字体的大小,是否粗体等。同时还指定了绘制字体需要的文件,在这是loadingFont.png。

  fnt文件可以使用BMFont工具来生成。

  2.绘制字体文件

    这个文件可以是一个图像文件,如上面所用的就是loadingFont.png,也可以是个.ttf文件。

二、创建BitmapFont对象

  获得BitmapFont的方法有多个

  1.直接构造

  先将上面两个文件放到Adnroid工程assets目录下的同一子目录,在这我放到assets/fonts目录下。

  在代码中构造该对象:

FileHandle fontFile = Gdx.files.internal("fonts/loadingFont.fnt");
FileHandle imageFile = Gdx.files.internal("fonts/loadingFont.png");
BitmapFont fontLoading = new BitmapFont(fontFile, imageFile, false);      

  BitmapFont还有很多个构造函数,具体可以参照其文档。

  2.通过AssetManager

  有时候我们会使用AssetManager统一加载所有资源,同样也可以用它来加载fnt文件。

  比如,我在Loading界面加载游戏界面的菜单字体:

assetManager.load("fonts/menuFont.fnt", BitmapFont.class);      

  在这仅加载fnt文件即可,不需要加载具体绘制字体的文件,libgdx会自动寻找该文件并替我们加载。

  menuFont.fnt的文件头如下:

info  size=60 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=0,0
common lineHeight=81 base=65 scaleW=512 scaleH=512 pages=2 packed=0
page id=0 file="menuFont1.png"
page id=1 file="menuFont2.png"      

  注意,要将menuFont1.png和menuFont2.png与menuFont.fnt放在同一目录下。

  最后通过AssetManger的get方法获取BitmapFont对象:

BitmapFont menu = assetManager.get("fonts/menuFont.fnt", BitmapFont.class);