0

通常の ttf レンダリング関数はテキストに const char* を使用しますが、レンダリングする TTF_RenderUNICODE_Solid() 関数は const Uint* を使用します。

この構造を使用して、ASCII 文字を操作しながら ttf サーフェスからテクスチャを作成しました。

Text = TTF_RenderText_Solid(times, title.c_str(), MakeColor(255, 0, 255));
ButtonTexture = SDL_CreateTextureFromSurface(renderer, Text);

.

そして、ユニコードで作業したいときは、これを試しました:

Text = TTF_RenderUNICODE_Solid(times, title.c_str(), MakeColor(255, 0, 255));
ButtonTexture = SDL_CreateTextureFromSurface(renderer, Text);

.

title.c_str() は const char* であり、関数は const Uint16 を必要とするため、テクスチャを作成できません。

これは私がタイトルを渡す方法です:

MenuButtons[0] = new CreateButton("TEXT");

void CreateButton(string title)
{
   Text = TTF_RenderText_Solid(times, title.c_str(), MakeColor(255, 0, 255));
   ButtonTexture = SDL_CreateTextureFromSurface(renderer, Text);
    //or
   Text = TTF_RenderUNICODE_Solid(times, title.c_str(), MakeColor(255, 0, 255));
   ButtonTexture = SDL_CreateTextureFromSurface(renderer, Text);
}

質問: 文字列を Uint16 に変換するにはどうすればよいですか?

4

1 に答える 1

1

の 2 つのバージョンを見てきTTF_RenderText_Solidました。1 つはサポートしutf-8、1 つはサポートしますlatin1。お使いのバージョンがサポートしているutf-8場合は、テキストがこの形式でエンコードされた文字列が必要です。シンプルなストレージユニットutf-8を使用するため、ドキュメントでそれを調べる必要があります。お使いのバージョンがサポートしている場合、予想される文字範囲よりも多くの文字をカバーしているとします。latin-1charlatin1ascii

ただし、それはまだあなたが望むものではありません。したがってTTF_RenderUNICODE_Solid、テキストプロデューサーを使用する場合は、文字を配信する必要がありますUTF-16titleそのため、コンテンツがどこから来て、どのようにエンコードされているかを知る必要があります。

高速な例として、静的テキストを試すことができます (c++11 コンパイラを使用):

const Uint16 text[]=u"Hello World! \u20AC";

これも役立つはずです: すべてのソフトウェア開発者が絶対に、積極的に Unicode と文字セットについて知っておく必要がある絶対的な最小値 (言い訳はありません!)

于 2015-09-05T12:56:19.767 に答える