TTF_RenderUNICODE_Solid()函数Uint16参数?

时间:2015-09-05 12:32:50

标签: c++ sdl sdl-ttf

普通的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?

1 个答案:

答案 0 :(得分:1)

我见过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!)