2015-05-05 4 views
0

У меня проблема с загрузкой шрифта SDL_TTF.SDL - TTF - шрифт не загружается

моя программа такая большая, поэтому есть кусок кода, который создает проблему.

TTF_Font *font = NULL; 
SDL_Color textColor = {255, 255, 255}; 

if(SDL_Init() == -1 || TTF_Init() == -1) 
    return 0; 

font = TTF_OpenFont("calibri.ttf", 28); 
if(font == NULL) 
    return 0; 

Теперь скажите, пожалуйста, почему funtion TTF_OpenFont не работает. шрифт остается после Funtion NULL и программа выходит ...

EDIT: Я не могу COUT или Printf TTF_GetError(), но я использовал точки останова, чтобы увидеть, какая функция не работает правильно и нашел функцию TTF_OpenFont() возвращают нуль каждый раз. (BTW если есть способ распечатать Erroe на экране, скажите пожалуйста). TTF_Init() работает правильно. ДЛЯ ЛЮДЕЙ, КОТОРЫЕ ПРОСИТ УСТАНОВИТЬ SDL_TTF ОТДЕЛЬНО: Я написал ссылку ниже, из которой я изучаю SDL в первом учебном пособии, он описывает, как установить SDL и интегрировать его в проект, На третьем занятии находится библиотека расширения SDL_IMAGE, которая необходимо было установить отдельно (что я сделал и использовал все функции изображения легко). На 7-м занятии он не научил, как устанавливать SDL_TFF, скорее говорит, что выполняет те же шаги, что и для SDL_IMAGE, но на этот раз для SDL_TTf, поэтому я загрузил SDL_TTF и установил и вы знаете, остальные после ....

для Windows 8.1, CodeBlocks, mingw32, SDL1 Вот ссылка я учусь SDL от SDL Tutorials Это, как я установил библиотеку расширений (SDL_TTF) Setting Up Extention Library

+3

Имеется ли файл? – nneonneo

+4

в 99,9% случаев, когда ресурсы не загружаются, потому что они существуют, но не в правильном месте. – Zammalad

+1

Вопрос: Вы поняли это? В: Вы проверяли ошибки TTF_Init(), как рекомендовано ниже? Вопрос: Вы в Linux, Windows или «что-то еще»? Какой компилятор: GCC, MSVS или «что-то еще»? Вопрос: Вы построили из источника? SDL TTF 2.0, от [здесь] (https://www.libsdl.org/projects/SDL_ttf/)? – FoggyDay

ответ

1

проблема решена. Спасибо EveryOne за то, что вы дали свое время ... Проблема была в программе, не распознающей шрифт (candara) , поэтому он копируется в мою папку проекта.

+0

Это, это. Является ли ожидаемое поведение TTF_OpenFont тем, что оно будет выглядеть только в каталоге проекта? –

+0

Я думаю, что нет, он может искать в ваш C: \ Windows \ Fonts –

2

Если font является NULL вы должны использовать TTF_GetError знать, что пошло не так.

Если сообщение об ошибке opaque, вы можете захотеть взглянуть на источник TTF_OpenFont.

2

Предложения:

1) Подставим этот код для TTF_Init():

if(TTF_Init()==-1) { 
    printf("TTF_Init: %s\n", TTF_GetError()); 
    exit(2); 
} 

2) Убедитесь, что вы называете его перед тем любые другие функции SDL_ttf.

Если вы все еще возникают проблемы, пожалуйста, укажите

  • вашу платформу (Windows? Linux?)

  • , как вы установили ваши TTF шрифты.

3) Смотрите также: https://www.libsdl.org/projects/SDL_ttf/docs/SDL_ttf.html

================================= ============================================

Извините, у вас все еще возникают проблемы с отображением шрифтов , Несколько дополнительных предложений:

1) Я уверен, что учебник, который вы используете, очень хорош. Но вы не можете предположить, что только потому, что вы следовали всем шагам, вы случайно не пропустили что-то.Чтобы решить эту проблему, вам придется «заглянуть за пределы» учебника.

2) Для начала нам необходимо подтвердить, удалось ли TTF_Init(). Мы должны уметь видеть статус возврата TTF_Init() и сообщения TTF_GetError().

В: Что такое возвращаемое значение TTF_Init?

Есть несколько способов, вы можете отобразить на экране «TTF_GetError»:

  • Запустить программу из командной строки («CMD»): printf("TTF_Init: %s\n", TTF_GetError());

  • Скопируйте ошибки в строку и посмотреть на она под отладчиком: char[80] msg; strcpy (msg, TTF_GetError());

  • Используйте Win32 MessageBox для отображения ошибок в всплывающем: MSDN - MessageBox function

3) Убедитесь, что у вас есть эти .dll на вашей файловой системе:

  • libfreetype * .dll

  • SDL2_ttf * .dll

  • Zlib * .dll

4) Посмотрите на шрифты, которые вы установили в своей файловой системе, например: C:\Windows\Fonts\*.ttf

Смотрите также SDL_ttf - Font directory/Where do fonts go?

+0

См. Правки. –

+0

1) Ссылка, которую вы указали, выглядит так, как будто она просто устанавливает SDL - я считаю, что вам нужно установить SDL TTF отдельно., Grab SDL2_ttf-devel-2.0.12-mingw.tar.gz отсюда: https: //www.libsdl. орг/проекты/SDL_ttf /. 2) Пожалуйста, чтобы изменить ваш вызов TTF_Init() в соответствии с вышеизложенным и обновить сообщение с выходом TTF_GetError(). – FoggyDay

+0

, пожалуйста, см. Правки снова –

0

Я знаю, что это был уже ответ, но я столкнулся с аналогичной проблемой с SDL2_ttf в Visual Studio 2015 и хочу поделиться своим решением, чтобы помочь, возможно, другим в будущем.

Моя проблема заключалась в том, что когда я запустил приложение SDLe, в котором использовался SDLe_ttf, он не смог загрузить шрифт, который был помещен в тот же каталог. Но когда я выполнил исполняемый файл сборки из командной строки, все было в порядке.

Я думаю, проблема в том, что Visual Studio 2015 выполняет исполняемый файл сборки из другого каталога, и поскольку я использовал только имя файла шрифта (Sans.ttf), он не мог загрузить шрифт, потому что он рассматривает его как относительный путь.

My soultion должен был просто префикс имени файла шрифта с помощью каталога выполнения, который можно получить, вызвав SDL_GetBasePath.

Смежные вопросы