Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/35: Рейтинг темы: голосов - 35, средняя оценка - 4.77
64 / 49 / 7
Регистрация: 09.11.2012
Сообщений: 219
1

Как вывести текст на экран, используя библиотеку SDL TTF для SDL 2?

14.10.2013, 22:50. Показов 6743. Ответов 6
Метки нет (Все метки)

В официальной доке как-то скомкано написано.
При инициализации SDL TTF и при загрузке шрифта ошибок нет. Но текст на экране не появляется.
C++
1
2
3
4
    SDL_Color fontColor = { 255, 0, 0, 255 };
    u16 text[] = { '2', 's', 'ä' };
    SDL_Surface *place = 0;
    SDL_Surface *info = TTF_RenderUNICODE_Solid(font, text, fontColor);
В цикле:
C++
1
2
3
        SDL_BlitSurface(info, 0, place, 0);
        SDL_FreeSurface(info);
        SDL_RenderPresent(renderer);
На всякий случай:
C++
1
font = TTF_OpenFont("Fonts/DinCompRegular.ttf", 24);
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2013, 22:50
Ответы с готовыми решениями:

Аналоговые часы используя библиотеку SDL.
Здравствуйте, нужно написать программу которая будет показывать правильное время на аналоговых...

Как правильно подключить библиотеку SDL
Здравствуйте, подскажите, пожалуйста, как правильно подключить библиотеку SDL. Я пользуюсь...

Как внедрить графическую библиотеку SDL в Visual Studio 2012
Никогда не внедрял сторонних библиотек в Visual Studio. В инете поискал, но так ничего и не понял....

SDL: куда поместить библиотеку
Можете объяснить как установить sdl и кинуть (желательно на русском) туториалы для sdl на free...

6
погромист
413 / 249 / 30
Регистрация: 27.08.2012
Сообщений: 550
14.10.2013, 23:00 2
Цитата Сообщение от Necronomicron Посмотреть сообщение
SDL_Surface *place = 0;
Ты отображаешь текст на неинициализированой поверхности?
0
64 / 49 / 7
Регистрация: 09.11.2012
Сообщений: 219
14.10.2013, 23:10  [ТС] 3
coloc, я уже по всякому пробовал. Это где-то в нете нашёл. Когда пробовал:
C++
1
2
    SDL_Surface *info = TTF_RenderUNICODE_Solid(font, text, fontColor);
    SDL_Surface *place = SDL_CreateRGBSurface(0, info->w, info->h, 32, 0, 0, 0, 0);
Ошибка:
Необработанное исключение по адресу 0x6C7DA01A (SDL2.dll) в Smth.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000000.

Добавлено через 6 минут
Если закомментировать:
C++
1
SDL_FreeSurface(info);
То нет ошибки, но текста всё равно нет.
0
погромист
413 / 249 / 30
Регистрация: 27.08.2012
Сообщений: 550
14.10.2013, 23:12 4
На СДЛ 1.3 точно работает TTF_RenderText. Через юникод не хочет работать.
C++
1
2
3
4
5
6
7
8
TTF_Font *font = TTF_OpenFont("font.ttf", 20); //загружаем шрифт
SDL_Color color = { 255, 0, 0 };               //задаем цвет
SDL_Surface *text = TTF_RenderText_Solid(font, "text", color);//делаем текстовый спрайт 
SDL_Rect place = { 100, 100, 0, 0 };                          //место где будет отображен текст
SDL_BlitSurface(text, NULL, screen, place);                   //отображаем текст на экране
                                                    //на СДЛ2 нужно иначе                       
SDL_FreeSurface(text);                              //чистим занятие ресурсы
TTF_CloseFont(font);
0
64 / 49 / 7
Регистрация: 09.11.2012
Сообщений: 219
15.10.2013, 04:12  [ТС] 5
coloc, но у меня SDL 2 и переходить на старый я точно не буду. Я пробовал просто текст, ничего не меняется.

Добавлено через 4 минуты
C++
1
SDL_BlitSurface(info, 0, place, &rect);
Теперь ошибки нет, но всё равно ничего не отображается.

Добавлено через 4 часа 53 минуты
Так, я решил проблему:
C++
1
2
    u16 text[] = { '2', L'Щ', L'ä', L'Ø' };
    SDL_Surface *info = TTF_RenderUNICODE_Blended(font, text, fontColor);
C++
1
2
3
        SDL_Rect src = { 0, 0, info->w, info->h };
        SDL_Rect dst = { 0, 0, info->w, info->h };
        SDL_RenderCopy(renderer, SDL_CreateTextureFromSurface(renderer, info), &src, &dst);
Но появилась другая: в конец добавляется какой-то мусор, 4-5 символов. Не могу понять, откуда оно вообще берётся.
0
5480 / 4875 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
15.10.2013, 07:23 6
Разве перед '2' не нужно L?
Цитата Сообщение от Necronomicron Посмотреть сообщение
в конец добавляется какой-то мусор, 4-5 символов. Не могу понять, откуда оно вообще берётся.
Может быть нужен терминальный ноль в массиве.
1
64 / 49 / 7
Регистрация: 09.11.2012
Сообщений: 219
15.10.2013, 07:26  [ТС] 7
alsav22, внатуре. Чот я сам не догадался попробовать...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2013, 07:26

SDL: вывести значение переменной
У меня есть часть кода...

Как, используя gui, вывести текст на экран
Здравствуйте, подскажите пожалуйста, можно ли с помощью Guide или просто прописать вручную вывести...

Эмуляция нажатия клавиш для SDL
Столкнулся с такой проблемой что на эмуляцию нажатия клавиш, SDL не реагирует. Точнее DOSBox....

Как пользоваться SDL
Здравствуйте, у меня такая проблема не как не могу найти как пользоваться SDL, за весь день я смог...

SDL: функция для определения размеров окна
Ребят Может кто знает, есть какая нибудь функция в SDL для определения размеров окна? Нужно, что...

Библиотека для 2d стратегии (аналоги SDL, SFML)
Привет, хочу сделать 2d игру, стратегию. Но без всяких там юнити и ему подобных, интересно самому...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.