6

編集: 問題はまだ存在しますが、詳しく調べるほど頻繁にこれを再現できていません。質問の最後にある詳細を参照してください。


私はゲームの開発を始めました。現在、そのための基本的なライブラリを作成しています。Linux Mint 13 (Maya) で、SDL-2 および OpenGL 3 (Derelict3 バインディングを使用) で D プログラミング言語を使用しています。コンパイラは DMD64 D Compiler v2.067.1 で、毎回 rdmd でバイナリをリビルドしています。

テキストをレンダリング (変更) するために、オンデマンドでグリフを作成します。これに使用するコードは次のとおりです。

class Font {
...

Texture render(char c) {
    if(!(c in rendered)) rendered[c] = texture(to!string(c));
    return rendered[c];
}

Texture texture(string text) {
    SDL_Color color={255, 255, 255, 255};

    auto bitmap = TTF_RenderText_Blended(
        font,
        std.string.toStringz(text),
        color
    );
    if(!bitmap) {
        throw new TTFError(
            "TTF_RenderText_Blended: " ~
            to!string(TTF_GetError()) ~ ": '" ~ text ~ "'"
        );
    }
    auto texture = new Texture(bitmap);
    SDL_FreeSurface(bitmap);
    return texture;
}

問題は、これが純粋にランダムに失敗することです。場合によっては問題なく動作します。グリフのレンダリングに失敗すると、同じグリフのレンダリングに何度も失敗するのは興味深いことです。私がスローした例外をキャッチするときの例を次に示します。

...
TTF_RenderText_Blended: Text has zero width: '9'
TTF_RenderText_Blended: Text has zero width: '6'
TTF_RenderText_Blended: Text has zero width: '9'
TTF_RenderText_Blended: Text has zero width: '6'
TTF_RenderText_Blended: Text has zero width: '9'
TTF_RenderText_Blended: Text has zero width: '6'
...

(スコアを画面に出力していますが、これらのいくつかを除いて他の数字は問題なく表示されます)。TTF_RenderText_Blended がレンダリングに失敗する数値は実行ごとに異なり、前述のように、すべての数値がレンダリングされることがあります。

詳細の 1 つは、ゲーム ループに入る前にレンダリングする静的文字列がまだレンダリングに失敗していないことです。テキストを変更するために使用する単一の文字だけです。

私はほとんどアイデアがありません.Webを検索しても、この問題に関連するものは何も見つかりませんでした. 解決策を探すためのアイデアは非常に高く評価されています。


現在の状況: コンパイラを DMD 2.067.1 に更新しましたが、問題は残ります (これまでに使用されたコンパイラ: 2.066.1、2.067.1)。全体 - プロジェクトファミリーが現時点でgithubにあるとしましょう:

https://github.com/mkoskim/games

テキスト グリフ レンダリング関数は、次のファイルにあります。

https://github.com/mkoskim/games/blob/master/engine/ext/font.d

...そしてここから使用されます:

https://github.com/mkoskim/games/blob/master/engine/ext/gui/label.d

この問題は、主に/最も頻繁に pacman ゲームで発生します (ただし、現時点ではめったに発生しません):

https://github.com/mkoskim/games/tree/master/testbench/pacman

試してみたい場合は、まずインストール手順をお読みください (できれば十分に完了しています)。

https://github.com/mkoskim/games/blob/master/INSTALL

このプロジェクトは 64 ビット Linux Mint Maya 用に作成されており、現在のところ、ビルドの観点からすると、それほどユーザー フレンドリーで移植性がありません。Pacman は、ゲーム コントローラーなしで (できれば) 動作する唯一のデモです。必要なライブラリとツールが正常にインストールされたら、次のコマンドでビルドできます。

games/testbench/pacman$ make default
4

2 に答える 2