Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SDL-TTF-字体未加载_C++_Sdl_Truetype - Fatal编程技术网

C++ SDL-TTF-字体未加载

C++ SDL-TTF-字体未加载,c++,sdl,truetype,C++,Sdl,Truetype,我在加载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; 现在请告诉我为什么TT

我在加载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。 (顺便说一句,如果有办法在屏幕上打印错误,请告诉我)。 TTF_Init()工作正常。 对于要求单独安装SDL_TTF的人员: 我写了下面的链接,在第一个教程中学习SDL,它指导如何安装SDL并将其集成到哪个项目中,在第三课中,SDL_图像扩展库需要单独安装(我这样做并轻松使用了所有图像功能),在第7课中,它没有教如何安装SDL_TFF,而是说要执行与SDL_映像相同的步骤,但这次是SDL_TTf,所以我下载了SDL_TTf并安装了,其余的你都知道了

Windows 8.1、代码块、MinGW32、SDL1 这是我学习SDL的链接 这就是我安装扩展库(SDL_TTF)的方式

如果
font
NULL
,您应该使用它来了解出了什么问题

如果错误消息不透明,您可能需要查看源代码。

建议:

1) 将此代码替换为TTF_Init():

2) 确保在调用任何其他SDL_ttf函数之前先调用它

如果您仍有问题,请说明

  • 您的平台(Windows?Linux?)

  • 如何安装TTF字体

3) 另见:

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

很抱歉,您在显示字体时仍然遇到问题。还有一些建议:

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在弹出窗口中显示错误:

3) 确保文件系统上有以下.dll:

  • libfreetype*.dll

  • SDL2_ttf*.dll

  • zlib*.dll

4) 查看文件系统上安装的字体,例如:
C:\Windows\font\*.ttf

另请参见已解决的问题。 谢谢大家给你时间。。。 问题是程序无法识别字体(candara)
因此,它复制粘贴到了我的项目文件夹中。

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

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

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


我的解决办法是在字体文件名前面加上执行目录,通过调用可以选择执行目录

文件存在吗?在99.9%的资源未加载的情况下,文件存在是因为它们存在,但不在正确的位置问:你弄明白了吗?问:您是否按照下面的建议检查了TTF_Init()错误?问:你是在Linux、Windows还是“其他什么”上?哪个编译器:GCC、MSVS还是“其他什么”?问:您是从源代码构建的吗?SDLTTF2.0,来自?请查看编辑。都德-查看.zip文件。你在.zip中的任何地方看到TTF了吗?正如我在下面所说的,我相信您可能需要单独安装SDL_TTF。请执行以下操作:1)修改您的TTF_Init()和TTF_OpenFont(),打印出TTF_GetError(),并用错误消息更新您的帖子。2) 按照以下链接下载并安装SDL_TTF。3) 让我们知道它是否有帮助。1)您引用的链接看起来只是安装了SDL-我相信您需要单独安装SDL TTF,从这里获取SDL2_TTF-devel-2.0.12-mingw.tar.gz:。2) 请根据以上修改您的TTF_Init()调用,并用TTF_GetError()输出更新您的帖子。这个,这个。TTF_OpenFont的预期行为是只在项目目录中查找吗?我认为不是,它可以在C:\Windows\Fonts中查找
if(TTF_Init()==-1) {
    printf("TTF_Init: %s\n", TTF_GetError());
    exit(2);
}