Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2011, 07:59   #1
Кипящий чайник
Форумчанин
 
Регистрация: 17.12.2009
Сообщений: 101
По умолчанию SDL_ttf и кириллица

Пишу на Windows XP, редактор Code::Blocks, компилятор gcc, язык Си соответственно.

Хочется русского текста в игре. Специально скачал Arial.ttf с http://www.truetype.ru из раздела "Кириллические".

Ожидая подвоха, всё же написал код:

Код:

SDL_Surface* text;

void WriteText(char* message){
    SDL_Color text_color = {0,0,0};

    TTF_Font *font = TTF_OpenFont("Arial.ttf", 28);
    if(!font){
        printf("Ошибка загрузки шрифта: %s\n", TTF_GetError());
        exit(1);
    }

    text = TTF_RenderText_Solid(font, message, text_color);
    text = TTF_RenderText_Solid(font, message, text_color);

    SDL_Rect src, dest;

    src.x = 0;
    src.y = 0;
    src.w = text->w;
    src.h = text->h;

    dest.x = screen->w/2;
    dest.y = screen->h/2;
    dest.w = text->w;
    dest.h = text->h;

    SDL_BlitSurface(text, &src, screen, &dest);
}
При попытке нарисовать сообщение "Рок-н-ролл жив!" (WriteText("Рок-н-ролл жив!")) на экране рисуются столь любимые мной кракозябры вместо русского текста.
Неужели придётся самому писать функции вывода текста, без SDL_ttf, или всё-таки есть способ вразумить библиотеку?
Кипящий чайник вне форума Ответить с цитированием
Старый 08.05.2011, 16:52   #2
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию

Гуглите в сторону setlocale, wchar_t, wprintf,
TTF_RenderUTF8_Solid
TTF_RenderUNICODE_Solid
Также возможно придется заюзать iconv.
P.S. Сам с SDL не работал.
Lingua c++ non penis caninus est.
Dayman вне форума Ответить с цитированием
Старый 08.05.2011, 17:09   #3
Кипящий чайник
Форумчанин
 
Регистрация: 17.12.2009
Сообщений: 101
По умолчанию

Когда я меняю char* на wchar_t*, то есть получается:

Код:

void WriteText(wchar_t* message); /*Функция уже прописана*/

int main(int argc, char* argv[])
{
/*Инициализация, загрузка шрифтов, установка видеорежима

...
*/

    WriteText(L"Рок-н-ролл жив!"); /*На этой строке выскакивает ошибка*/

    SDL_Flip(screen);
    SDL_Delay(3000);
    return 0;
}
Компилятор выдаёт ошибку, добравшись до строки строки с вызовом функции WriteText:

error: converting to execution characterset: Illegal byte sequence
Кипящий чайник вне форума Ответить с цитированием
Старый 08.05.2011, 18:55   #4
Кипящий чайник
Форумчанин
 
Регистрация: 17.12.2009
Сообщений: 101
По умолчанию

Моё решение: меняем кодировку в Code::Blocks на Unicode или UTF-8, и всё работает.
Кипящий чайник вне форума Ответить с цитированием
Старый 08.05.2011, 20:14   #5
Dayman
Форумчанин
 
Аватар для Dayman
 
Регистрация: 12.01.2011
Сообщений: 186
По умолчанию

Цитата:
Сообщение от Кипящий чайник Посмотреть сообщение
error: converting to execution characterset: Illegal byte sequence
Для Unicode есть TTF_RenderUNICODE_Solid
Lingua c++ non penis caninus est.
Dayman вне форума Ответить с цитированием
Старый 09.05.2011, 08:32   #6
Кипящий чайник
Форумчанин
 
Регистрация: 17.12.2009
Сообщений: 101
По умолчанию

Без смены кодировки не работает.
Кипящий чайник вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кириллица Hemul Visual C++ 7 29.12.2010 19:38
Сокеты и кириллица tools Visual C++ 3 27.12.2010 14:39
Кириллица D.O.G БД в Delphi 4 18.10.2010 06:42
wchar + кириллица Toshig Общие вопросы C/C++ 0 03.10.2010 02:54
Кириллица в FoxPro 2.6 DimOn4Ik БД в Delphi 0 02.05.2010 16:24