TTF_RenderUNICODE_Solid()函数Uint16参数

TTF_RenderUNICODE_Solid() Function Uint16 Parameter?

本文关键字:函数 Uint16 参数 RenderUNICODE Solid TTF      更新时间:2023-10-16

当普通的ttf渲染函数使用const char*作为文本时,他们将渲染TTF_RenderUNICODE_Solid()函数使用const Uint*。

我使用这个结构从ttf表面创建纹理,同时使用ASCII字符:

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

.

当我想使用unicode时,我尝试了这个:

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?

我看过两个版本的TTF_RenderText_Solid。一个支持utf-8,一个支持latin1。当您的版本支持utf-8时,您只需要一个字符串,其中的文本以这种格式编码。utf-8latin-1使用简单的char作为存储单元,因此您需要在文档中查找以了解这一点。让我们假设您的版本支持latin1,那么它涵盖的字符比您期望的ascii字符范围更多。

然而,那仍然不是你想要的。因此,当您想要使用TTF_RenderUNICODE_Solid时,您的文本生成器必须提供UTF-16字符。所以你需要知道title的内容来自哪里,以及它是如何编码的。

对于一个快速的例子,你可以尝试静态文本(使用c++11编译器):
const Uint16 text[]=u"Hello World! u20AC";

这也应该有帮助:每个软件开发人员绝对、肯定地必须了解Unicode和字符集(没有借口!)