【问题标题】:How to draw TrueTypeFont when using Iw2d in Marmalade?在果酱中使用 Iw2d 时如何绘制 TrueTypeFont?
【发布时间】:2012-11-16 17:37:38
【问题描述】:

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

【问题讨论】:

    标签: marmalade


    【解决方案1】:

    给定代码缺少调用 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();
    

    【讨论】:

    • 谢谢我有同样的问题,我用 Iw2DFinishDrawing 解决了它。
    【解决方案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
    }
    

    【讨论】:

    • 这段代码大部分是从example复制的:examples/IwGxFont/IwGxFontTTF,它似乎使用Serif.ttf文件作为字体文件。
    • 进行了更正。感谢您指出,我知道了另一种加载字体的方法。
    猜你喜欢
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多