在Marmalade中使用Iw2d时如何绘制TrueType字体?

时间:2012-11-16 17:37:38

标签: marmalade

在使用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);
 }

2 个答案:

答案 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
}