SDL - TTF - 字体未加载

时间:2015-05-05 20:19:52

标签: c++ sdl true-type-fonts

我在加载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;

现在请告诉我为什么功能TTF_OpenFont无效。 功能和程序退出后字体保持为空......

编辑: 我不能cout或printf TTF_GetError(),但我使用断点来查看哪个函数无法正常工作,并发现函数TTF_OpenFont()每次都返回null。 (顺便说一句,如果有任何方法在屏幕上打印Erroe请告诉)。 TTF_Init()工作正常。 对于分别要求安装SDL_TTF的人们: 我已经编写了下面的链接,我在第一个教程中学习SDL,它指导如何安装SDL并将其集成到哪个项目中,在第3课中是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

4 个答案:

答案 0 :(得分:3)

如果fontNULL,您应该使用TTF_GetError来了解问题所在。

如果错误消息 opaque ,您可能需要查看TTF_OpenFont来源。

答案 1 :(得分:3)

建议:

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?

答案 2 :(得分:2)

问题已解决。 感谢EveryOne给你的时间...... 问题是程序无法识别字体(candara) 所以它复制粘贴在我的项目文件夹中。

答案 3 :(得分:0)

我知道这已经回答了,但我在Visual Studio 2015下遇到了与SDL2_ttf类似的问题,想要分享我的解决方案以帮助将来的其他人。

我的问题是,当我启动使用SDLe_ttf的SDLe应用程序时,它无法加载放在同一目录中的字体。但是当我从命令行手动执行构建可执行文件时,一切都很好。

我认为问题是Visual Studio 2015从不同的目录执行构建可执行文件,因为我只使用了字体文件名(Sans.ttf),所以它无法加载字体,因为它将其视为相对路径。 / p>

我的灵魂就是在字体文件名前加上执行目录,可以通过调用SDL_GetBasePath来获取。