在使用Iw2D完成的游戏中,我想使用IwGx模块支持的TTF字体。 我读到IwGxFont模块与Iw2D一起使用是可行的,但我必须错过一些东西 文本没有出现。它编译并运行,只是没有文本。
代码:
Iw2DInit();
DPI::dpiInit();
IwResManagerInit();
IwGxFontInit();
IwGetResManager()->LoadGroup("IwGxFontTTF.group");
font = (CIwGxFont*)IwGetResManager()->GetResNamed("Serif_6", "CIwGxFont");
...
while (!s3eDeviceCheckQuitRequest()) {
s3ePointerUpdate();
s3eKeyboardUpdate();
if (s3eKeyboardGetState(s3eKeyAbsBSK) & S3E_KEY_STATE_DOWN) {
break;
}
current_time = s3eTimerGetMs();
const float dt = (current_time - last_frame_time)/1000.0f;
last_frame_time = current_time;
Iw2DSurfaceClear(0xffffffff);
game->draw(dt);
IwGxFontSetCol(0xffa0a0a0);
IwGxFontSetRect(CIwRect(10,40,(int16)IwGxGetScreenWidth()-20,40));
IwGxFontSetAlignmentVer(IW_GX_FONT_ALIGN_BOTTOM);
IwGxFontSetFont(font);
IwGxFontDrawText("Lorem ipsum dolor sit amet");
IwGxFlush();
Iw2DSurfaceShow();
s3eDeviceYield(0);
logger.log(dt);
}
答案 0 :(得分:4)
鉴于代码丢失,请调用Iw2DFinishDrawing。应该是:
Iw2DSurfaceClear(0xffffffff);
game->draw(dt);
Iw2DFinishDrawing();
IwGxFontSetCol(0xffa0a0a0);
IwGxFontSetRect(CIwRect(10,40,(int16)IwGxGetScreenWidth()-20,40));
IwGxFontSetAlignmentVer(IW_GX_FONT_ALIGN_BOTTOM);
IwGxFontSetFont(font);
IwGxFontDrawText("Lorem ipsum dolor sit amet");
IwGxFlush();
Iw2DSurfaceShow();
答案 1 :(得分:2)
我只知道您要使用FontBuilder
工具为字体创建.gx文件,并且只能使用这些字体。 IwGxFont
模块仅适用于.gx字体文件。您使用的方法只能与gx字体一起使用。
因此,如果您想使用TTF字体,除了将字体转换为GX格式之外,还有其他任何方法或根本没有其他方法。
修改: - 强>
在阅读api后,我发现有另一种使用TTF字体的方法,尽管你的问题已经解决了。我想我应该纠正我的答案。方法是将ttf字体用于具有预定义大小和样式的组文件,例如fontbuilder工具在创建gx字体时的工作方式。在组中添加以下行将允许ttf字体能够从IwResManager加载。
CIwGxFont
{
name "Serif_8"
ttf ".\Fonts\serif.ttf"
ttfPointSize 8
}