2

Iw2D で作成したゲームで、IwGx モジュールでサポートされている TTF フォントを使用したいと考えています。Iw2D で IwGxFont モジュールを使用することは可能であると読みましたが、テキストが表示されないため、何かが欠けているに違いありません。コンパイルして実行しますが、テキストはありません。

コード:

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);
 }
4

2 に答える 2

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();
于 2012-11-18T15:34:04.173 に答える
2

FontBuilderツールを使用してフォント用の .gx ファイルを作成する必要があり、それらのフォントのみを使用できることはわかっています。このIwGxFontモジュールは、.gx フォント ファイルに対してのみ機能します。使用している方法は、gx フォントでのみ使用できます。

したがって、TTF フォントを使用する場合は、他の方法があるか、フォントを GX 形式に変換する以外に方法がまったくないかのどちらかです。

編集:-

API を読んだ後、TTF フォントを使用する別の方法があることを知りましたが、問題は既に解決されています。私は自分の答えを修正する必要があると思いました。その方法は、gx フォントを作成するときに fontbuilder ツールが行うように、ttf フォントを使用して、事前定義されたサイズとスタイルを持つグループ ファイルにすることです。グループに次の行を追加すると、IwResManager から ttf フォントをロードできるようになります。

CIwGxFont
{
    name "Serif_8"

    ttf ".\Fonts\serif.ttf"
    ttfPointSize 8
}
于 2012-11-17T05:47:46.443 に答える