跨平台游戏编程与 gameplay3d/文本和字体
外观
Gameplay3d 支持 TrueType 字体,但这些字体必须首先被转换为 gameplay 包文件(见 跨平台游戏编程与 gameplay3d/gameplay3d 设计概念#创建和导入资源),然后才能在你的项目中使用。
使用以下步骤将字体导入你的项目
- 查找或创建 TrueType 字体文件(.ttf)。
- 将 .ttf 文件传递给 gameplay-encoder 命令行工具,并指定你想要的尺寸。GamePlay/bin 下提供了一个预编译的 gameplay-encoder 版本
gameplay-encoder -s 28 myfont.ttf
- gameplay-encoder 将输出一个 .gpb 文件。
- 将 .gpb 文件复制到你的游戏的资源目录。(无需包含 .ttf 文件。)
- 按如下方式将你的字体导入你的项目
// Create a font from the gpb file
Font* _font = Font::create("res/myfont.gpb");
要使用字体进行渲染
- 首先,在你的字体实例上调用
Font::start()
来开始绘制文本; - 其次,调用
Font::drawText()
在定义的位置绘制一些文本。此函数有四种不同的重载,参数可以在 Font.h 中找到;以及 - 最后,调用
Font::finish()
来完成相关字体的文本批处理,并渲染所有绘制的文本。
以下是如何加载字体并使用它在屏幕上渲染游戏的帧率的示例。
void MyGame::initialize()
{
// Create a font from the gpb file
_font = Font::create("res/myfont.gpb");
}
void MyGame::render(float elapsedTime)
{
// Clear the frame buffer
clear(CLEAR_COLOR_DEPTH, Vector4(0, 0, 0, 1), 1.0f, 0);
// Draw the text at position 20,20 using red color
_font->start();
char text[1024];
sprintf(text, "FPS:%d", Game::getFrameRate());
_font->drawText(text, 20, 20, Vector4(1, 0, 0, 1), _font->getSize());
_font->finish();
}
void MyGame::finalize()
{
// Use built-in macros to clean up our resources.
SAFE_RELEASE(_font);
}
可以在 Font::start()
和 Font::finish()
之间多次调用 Font::drawText()
,以便使用相同的字体在不同的位置绘制不同的文本。
从 2.0.0 版本开始,gameplay3d 支持距离场字体。你可以在 Valve 的论文 针对矢量纹理和特殊效果的改进 Alpha 测试放大 中了解更多关于距离场字体的知识,但简而言之,距离场字体比位图字体看起来要好得多,尤其是在高放大倍率下!
要创建距离场字体,在运行 gameplay-encoder 时使用 -f:d
选项参数,例如
gameplay-encoder -s 50 -f:d myfont.ttf