android游戏开发框架libgdx的使用(三)–中文显示与汉字绘制

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2011/11/11/libgdx_3/

本文使用的libgdx是0.92版本,和现在的最新版可能有一些不一样的地方。全文内容仅供参考。

本来这篇想写场景的,但是昨天和群里一个朋友讨论了一下libgdx显示汉字的问题。以前没有注意到这个问题,发现还是蛮严重的,要是不支持中文,libgdx用着就有点不愉快了。

我们来看看BitmapFont类,这是有关文字绘制的。看一下源码:

publicBitmapFont () {
this(Gdx.files.classpath("com/badlogic/gdx/utils/arial-15.fnt"),
Gdx.files.classpath("com/badlogic/gdx/utils/arial-15.png"),false,true);
}

这是默认的构造函数,可以看出它加载了两个文件arial-15.fnt和arial-15.png。

arial-15.fnt文件的部分内容:

infoface="Arial"size=15bold=0italic=0charset=""unicode=0stretchH=100smooth=1aa=1padding=0,0,0,0spacing=1,1commonlineHeight=18base=14scaleW=256scaleH=256pages=1packed=0pageid=0file="arial-15.png"charscount=189charid=32x=0y=0width=0height=0xoffset=0yoffset=14xadvance=4page=0chnl=0 charid=255x=0y=0width=8height=19xoffset=-1yoffset=0xadvance=7page=0chnl=0 charid=254x=8y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=253x=17y=0width=8height=19xoffset=-1yoffset=0xadvance=7page=0chnl=0 charid=252x=25y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=251x=34y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=250x=43y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=249x=52y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=248x=61y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=247x=70y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=246x=79y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=245x=88y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=244x=97y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=243x=106y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=242x=115y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=241x=124y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=240x=133y=0width=9height=19xoffset=1yoffset=0xadvance=8page=0chnl=0 charid=239x=142y=0width=5height=19xoffset=0yoffset=0xadvance=3page=0chnl=0 …kerningscount=374kerningfirst=49second=49amount=-1kerningfirst=121second=44amount=-1kerningfirst=121second=46amount=-1kerningfirst=119second=44amount=-1kerningfirst=119second=46amount=-1kerningfirst=118second=44amount=-1kerningfirst=118second=46amount=-1kerningfirst=114second=44amount=-1kerningfirst=114second=46amount=-1kerningfirst=89second=44amount=-2kerningfirst=89second=45amount=-1kerningfirst=89second=46amount=-2kerningfirst=89second=58amount=-1kerningfirst=89second=59amount=-1kerningfirst=89second=65amount=-1kerningfirst=89second=97amount=-1kerningfirst=89second=101amount=-1…

 

再看看arial-15.png:

arial-15

可以很明显看出,libgdx的文字绘制是根据fnt文件获取对应文字的在png中的坐标位置,然后截取图片的相应部分进行绘制。

那么要让libgdx支持中文思路就很简单了,我们自己构造fnt和png文件,其中包含我们要使用的中文即可。

作者给我们提供了一个对应的工具:Hiero

下载后双击运行,在右侧列表中选择一个可以用的字体,然后输入需要的中文,最好保留自动生成的英文和符号。

hiero界面

在右侧的Effects中可以设置效果:

hiero界面效果

点File—Save as BMFont Files,生成两个文件,将它们拷贝到asserts文件夹。

生成的文件

使用

bitmapFont =new BitmapFont(Gdx.files.internal("cf.fnt"), Gdx.files.internal("cf.png"),false);

指定我们生成的文件作为绘制的参考,然后绘制:

bitmapFont.draw(spriteBatch,"FPS" + Gdx.graphics.getFramesPerSecond(),5, Gdx.graphics.getHeight() -10);
bitmapFont.draw(spriteBatch,"祝大家光棍节快乐",0, Gdx.graphics.getHeight()/2-8);

效果:

libgdx显示汉字效果图

关于多行文字:

可以调用

public TextBoundsdrawMultiLine (SpriteBatch spriteBatch, CharSequence str,float x,float y)

或者

public TextBoundsdrawMultiLine (SpriteBatch spriteBatch, CharSequence str,float x,float y,float alignmentWidth,HAlignment alignment)

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2011/11/11/libgdx_3/

发表评论