libgdx虽然是由美国人Mario Zechner(即BadlogicGames)写的开源引擎,由于Libgdx底层是用OpenGL实现的,所以Libgdx是可以支持中文的,在libgdx中的汉字都是通过贴图的方式显示,使用BitmapFont和SpriteBatch组合来完成文字的绘制,构造BitmapFont时需要一个描述文字构成的fnt文件,和一个提供文字图片的png文件。因此显示中文,归根结底就是读取一个包含中文信息的.fnt文件和相应的.png文件并展示出来的问题。
使用hiero.jar
注意:如果你要使用的字,只能是.fnt文件里面存在的文字,否则是显示不出来的.比如,我文件里面有“奋斗小土豆”几个字,那么我可以在程序输出的时候写出这几个字,但是我要是想输出“杜甫很忙”这4个字,因为编辑文件里面没有这几个字,那么就显示不出来。
PS: 为什么要加载fnt文件?.fnt文件是做什么用的呢?
答:由于Libgdx底层是用OpenGL实现的,所以Libgdx是可以支持中文的。但是libgdx中的汉字都是通过贴图的方式显示的,我们用记事本打开 Potato.fnt文件,里面显示的部分内容(如下图),同时对照.png图片来参考下,可以发现可以很明显看出,libgdx的文字绘制是根据fnt文件获取对应文字的在png中的坐标位置,然后截取图片的相应部分进行绘制。
2.BitmapFont类
API介绍:呈现位图字体,包括2个文件:一个图像文件textureregion,包含符号在anglecode
bmfont文本格式,描述了每个字形是图像文件。文本是使用一个SpriteBatch画。
功能用途:渲染静态文本,同时可以设置文字颜色,文字大小等。
使用方法:我们可以手动设置文字大小和颜色以及旋转,这里使用函数设置是可以的,在Hiero里面也是可以设置的,可以自行选择哪种方法设置,new()里面的false是管理翻转的。
文字换行显示,只需要在中文字符中加入换行符(\n)即可
实例代码:
1 package com.mygdx.drawimage; 2 3 import com.badlogic.gdx.ApplicationListener; 4 import com.badlogic.gdx.Gdx; 5 import com.badlogic.gdx.graphics.GL20; 6 import com.badlogic.gdx.graphics.g2d.BitmapFont; 7 import com.badlogic.gdx.graphics.g2d.SpriteBatch; 8 /** 9 * 显示与绘制汉字 10 * @author Jack(乐智) 11 * @blog dtblog.cn 12 * @qq 984137183 13 */ 14 public class UseFont implements ApplicationListener { 15 16 //精灵批 17 private SpriteBatch batch; 18 //字体 19 private BitmapFont font; 20 21 @Override 22 public void create() { 23 font=new BitmapFont(Gdx.files.internal("data/test.fnt"),Gdx.files.internal("data/test.png"),false);//加载字体文件和字体图片 24 font.setColor(0.5f,0.4f,0.6f,1);//设置颜色 25 batch=new SpriteBatch(); 26 } 27 28 @Override 29 public void resize(int width, int height) { 30 // TODO Auto-generated method stub 31 32 } 33 34 @Override 35 public void render() { 36 Gdx.gl.glClearColor(1, 1, 1, 1); 37 Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 38 batch.begin(); 39 font.draw(batch, "我大你大呢", 200, 160);//绘制字体 40 font.draw(batch, "我大\n你大呢", 200, 360);//绘制字体,使用转义字符换行 41 batch.end(); 42 } 43 44 @Override 45 public void pause() { 46 // TODO Auto-generated method stub 47 48 } 49 50 @Override 51 public void resume() { 52 // TODO Auto-generated method stub 53 54 } 55 56 @Override 57 public void dispose() { 58 // TODO Auto-generated method stub 59 60 } 61 62 }
效果: