第三章 中文绘制
Libgdx底层采用OpenGL实现,因此支持中文,汉字以贴图形式显示出来,需要读取包含中文信息的.fnt文件
和相应的.png文件来显示,因此我们的工具Hiero就出来了,运行界面如下图
Hiero工具
1.用于制作xxx.fnt和xxx.png文件的工具,主要用于中文绘制
2.使用方法:读取fnt配置文件和读取对应的png图片中的汉字并显示出来(PS.也就是说你要输出的汉字必须是你这个fnt和png里有的才会显示出来,待会演示)
3下载地址:https://code.google.com/p/libgdx/downloads/list(emmmm....这个网站好像得科学上网 百度一下Hiero应该有至少****有人传了)
4.保存方法:Sample Text输入完你的字然后调试完各种乱七八糟的偏好后,我们就可以来保存了,首先点击File
有四个选项,第一,二是打开保存这个Hiero自带格式(就像Photoshop的PSD一样,供自己软件用),所以我们要选择第三个Save BMFont files保存为x.fnt
Bitmap Font
有了图片当然要用它,不然做上一步就没意义了,那么首先来了解Bitmap Font
1.定义:通过读取2个文件,一个是图片TextureRegion,另一个是描述了每个字符位置及相关信息的配置文件,他们都是使用SpriteBatch绘制的。
2.用途:渲染静态文本,同时可以设置文字颜色,文字大小等。
3.BitmapFont3个参数中最后一个参数是设置文字是否翻转。
讲完了废话般的定义就直接正题。
如何进行文字的单行显示?
1.draw()方法:draw(SpriteBatch batch,Char string,float x,float y)
2.SpriteBatch类还是画笔之前说过了.
3.第二个Char的是目标字符串,也就是你打算在你的android项目上显示的东西,这里的字在强调下,必须是刚才上一步的.fnt里有的字,顺序可以不一样没关系,但字一定是之前有的才会显示,不然不会显示,直接当你没输入
4.第三第四个值是绘制中文字符在你android系统的位置坐标,是普通的坐标系(小学数学那种第一象限)
好接下来来个演示
SpriteBatch batch; BitmapFont font; @Override public void create () { batch=new SpriteBatch(); font =new BitmapFont(Gdx.files.internal("texs.fnt"),Gdx.files.internal("texs.png"),false); //font.setColor(Color.RED);//变色,原来颜色直接叠加红色 font.getData().setScale(4.0f);//将字体大四倍 } @Override public void render () { Gdx.gl.glClearColor(1,1,1,1);//设置背景为白色 Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);//清屏 batch.begin(); font.draw(batch,"我超喜欢飒沓壹玖壹as雅施达1",120,600);//原图只有 “我超喜欢玖壹壹的歌” batch.end(); }
所以我们看到的结果会是这样 直接无视你图片中没有的字不管是字母还是汉字数字。
那么如何进行文字的多行显示?emm..会换行那种
其实只要加个\n就换行了,至于网上说的drawMultiLine()好像更新换代后没了。。。。。
font.draw(batch,"人生若只如初见,何事秋风悲画扇。\n" + "等闲变却故人心,却道故人心易变。",Gdx.graphics.getWidth()/5,0.8f*Gdx.graphics.getHeight());
emmmm还有一个方法就是截断字句
draw(Batch batch, Char str, float x, float y, int start , int end, float targetWidth,int halign, boolean wrap)
start是从第几个字符开始,end是到第几个字符结束,但后面三个值我不明白,有知道的可以留言
@Override public void render () { Gdx.gl.glClearColor(1,1,1,1);//设置背景为白色 Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);//清屏 batch.begin(); font.draw(batch,"人生若只如初见,何事秋风悲画扇。\n" + "等闲变却故人心,却道故人心易变。",Gdx.graphics.getWidth()/5,0.8f*Gdx.graphics.getHeight()); font.draw(batch,"人生若只如初见,何事秋风悲画扇。" ,400,800,2,10,10f,200,true); //font.draw(batch,"人生若只如初见,何事秋风悲画扇。" ,400,200); batch.end(); }