前面讲到使用Hireo创建的BitmapFont以显示中文字体。这种方式效率很高,当所要显示的字的总数较少,并且大小比较固定时,可以采用这种方式。
但是这种也有弊端:
(1)字体大小不能随意设置,当放大时就会变形。
(2)当所要显示的字总数较多或者经常变化时,会很麻烦。
libgdx对中文的支持不太好,也是很多人转向其他引擎的一个原因。幸好,其扩展模块中的FreeType能够通过ttf字体来实现随意中文显示。
FreeType是libgdx的扩展模块,创建项目时需要添加对应的jar包和对应的动态运行库。
core工程lib中加入gdx-freetype.jar。
desktop工程lib中加入gdx-freetype-natives.jar。
android工程中lib加入gdx-freetype.jar,并将armeabi和armeabi-v7a中的libgx-freetype.so文件添加到对应的目录中。
三个工程中分别将对应的jar包添加到Refrenced Libraries中。
环境配置完成,具体事例如下:
package com.fxb.freetype; 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.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeBitmapFontData; public class FreeType implements ApplicationListener{ BitmapFont[] font;
//FreeTypeBitmapFontData fontData;
FreeTypeFontGenerator generator;
SpriteBatch batch; @Override
public void create() {
// TODO Auto-generated method stub
batch = new SpriteBatch();
font = new BitmapFont[];
Color[] colors = { Color.RED, Color.BLUE, Color.GREEN };
for( int i=; i<; ++i ){
generator = new FreeTypeFontGenerator( Gdx.files.internal( "data/" + (i+) + ".ttf" ) );
font[i] = generator.generateFont( , FreeTypeFontGenerator.DEFAULT_CHARS+"今天是个好日子,大家心情都很", false );
font[i].setColor( colors[i] );
generator.dispose();
} //fontData = generator.generateData( 25, FreeTypeFontGenerator.DEFAULT_CHARS+"今天是个好日子,大家心情都很", false );
} @Override
public void resize(int width, int height) {
// TODO Auto-generated method stub } @Override
public void render() {
// TODO Auto-generated method stub Gdx.gl.glClearColor( , , , );
Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT ); batch.begin();
for( int i=; i<; ++i ){
font[i].drawMultiLine( batch, "今天是个好日子,\n大家心情都很好\nVery Good! 20140521!!", , *(-i) );
}
batch.end();
} @Override
public void pause() {
// TODO Auto-generated method stub } @Override
public void resume() {
// TODO Auto-generated method stub } @Override
public void dispose() {
// TODO Auto-generated method stub
batch.dispose();
} }
运行效果:
文中用到了3个ttf文件,1.ttf为娃娃体,2.ttf为幼圆,3.ttf为行楷。