第十章:加载字体

jME3 支持 BMFont字体,加载为 com.jme3.font.BitmapFont 对象。

Bitmap Font是AngleCode公司开发的一种技术,用于在3D场景中显示2D的文字。这种方法的原理是把要使用的文字做成一副图片,然后由程序根据文字的内容来动态选择图块,再绘制成一副新的图片。

JME3内置字体

jME3的内置一套BMFont字体,包含阿拉伯数字和大小写英文字母,用于显示系统的渲染状态。

下例演示了如何加载这套字体:

BitmapFont font = assetManager.loadFont("Interface/Fonts/Default.fnt");

显示文字

BitmapFont仅仅是字体,实际的文本内容用BitmapText表示。

BitmapFont fnt = assetManager.loadFont("Interface/Fonts/Default.fnt");
BitmapText txt = new BitmapText(fnt, false);
txt.setSize(0.5f);
txt.setText("Hello world!");
rootNode.attachChild(txt);

效果:

BitmapTextNode 的子类,可以直接添加到 rootNode 中,显示为3D场景中的物体。若是希望将其显示为GUI,则应该添加到 guiNode 中。

// 加载字体
BitmapFont fnt = assetManager.loadFont("Interface/Fonts/Default.fnt");
BitmapText txt = new BitmapText(fnt, false);
txt.setSize(32f);// <--- GUI 单位是像素
txt.setText("Hello world!");

guiNode.attachChild(txt);

// 居中
float screenWidth = cam.getWidth();
float screenHeight = cam.getHeight();
float txtWidth = txt.getLineWidth();
float txtHeight = txt.getHeight();

float x = (screenWidth - txtWidth) * 0.5f;
float y = (screenHeight + txtHeight) * 0.5f;
txt.setLocalTranslation(x, y, 0);

效果如下:

制作字体

BMFont能显示的字符数量是有限的。如果你想在游戏中显示中文,就需要自己制作字体文件。如果想要显示不同的字体、字形,也得制作不同的字体文件。

详细用法请参考:

TTF字体

若想在jME3中加载ttf字体,需要第三方插件支持,详见: