普通的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?
答案 0 :(得分:1)
我见过TTF_RenderText_Solid
的两个版本。一个支持utf-8
,一个支持latin1
。当您的版本支持utf-8
时,您只需要一个字符串,其中文本以此格式编码。 utf-8
和latin-1
使用简单的char
作为存储单元,因此您需要在文档中查找以了解相关信息。假设您的版本支持latin1
,那么它涵盖的字符数超出预期的ascii
字符范围。
然而,那仍然不是你想要的。因此,当您想要使用TTF_RenderUNICODE_Solid
时,您的文本制作者必须提供UTF-16
个字符。因此,您需要知道来自title
的内容来自何处及其编码方式。
对于快速示例,您可以尝试静态文本(使用c ++ 11编译器):
const Uint16 text[]=u"Hello World! \u20AC";