我在加载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
答案 0 :(得分:3)
如果font
为NULL
,您应该使用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
答案 2 :(得分:2)
问题已解决。 感谢EveryOne给你的时间...... 问题是程序无法识别字体(candara) 所以它复制粘贴在我的项目文件夹中。
答案 3 :(得分:0)
我知道这已经回答了,但我在Visual Studio 2015下遇到了与SDL2_ttf类似的问题,想要分享我的解决方案以帮助将来的其他人。
我的问题是,当我启动使用SDLe_ttf的SDLe应用程序时,它无法加载放在同一目录中的字体。但是当我从命令行手动执行构建可执行文件时,一切都很好。
我认为问题是Visual Studio 2015从不同的目录执行构建可执行文件,因为我只使用了字体文件名(Sans.ttf),所以它无法加载字体,因为它将其视为相对路径。 / p>
我的灵魂就是在字体文件名前加上执行目录,可以通过调用SDL_GetBasePath来获取。