2015-09-05 4 views
0

В то время как обычные функции рендеринга ttf принимают const char * для текста, который они будут отображать. Функция TTF_RenderUNICODE_Solid() принимает const Uint *.TTF_RenderUNICODE_Solid() Функция Параметр Uint16?

Я использовал эту структуру для создания текстур из TTF поверхностей при работе с ASCII-символов:

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?

+0

Что в 'title' во втором случае ? Если это не Unicode, почему вы используете функцию Unicode? –

+0

Это юникод, я хочу, чтобы моя программа была способна отображать символы, такие как «ç, ş, ü, ğ, ı», которых у ASCII нет. – bfkjohns

+1

Пришлите, пожалуйста, дополнительную информацию. Где происходит «титул»? Это utf-8, ascii или, например, латинский-1 текст? – HelloWorld

ответ

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"; 

Это также должно помочь: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

+0

const Uint16 text [] = u "Hello World! \ U20AC"; когда я набираю это, я получаю следующие ошибки: инициализация с {...} ожидается для совокупного объекта и ожидается a ;; – bfkjohns

+0

Это сообщение об ошибке Utf16Char не определено. Я также перенес свой проект в vs2012, но все равно получаю ту же ошибку. – bfkjohns

+0

Он работает, но я получаю действительно странный символ вместо привет. – bfkjohns