第十章:加载字体
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);
效果:
BitmapText
是 Node
的子类,可以直接添加到 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字体,需要第三方插件支持,详见: