TTF_RenderUNICODE_Solid() 函数 Uint16 参数?

TTF_RenderUNICODE_Solid() Function Uint16 Parameter?

虽然普通的 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);

.

当我想使用 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";

这也应该有所帮助: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)