【问题标题】:SFML "failed to create the font face" issueSFML“未能创建字体”问题
【发布时间】:2016-08-10 20:28:58
【问题描述】:

我在 Visual Studio 2015 中使用 SFML 来制作需要我打印文本的游戏。我尝试加载字体并不断收到“创建字体失败”的错误消息。我尝试加载几种不同的字体,但它们都不起作用,它们位于正确的目录中,即我的项目所在的文件夹。

这就是它的全部内容,但它不起作用:

 sf::Font font;
    if (!font.loadFromFile("arial.ttf"))
        return EXIT_FAILURE;

arial 的 ttf 文件与项目本身位于同一文件夹中,这似乎可以解决我在网上找到的其他有同样问题的人的问题。知道为什么字体仍然无法加载吗?

【问题讨论】:

  • 您是否绝对确定运行问题时的当前工作目录是那些字体文件所在的目录(即您是否通过例如在尝试加载文件之前打印 cwd 来验证它)?您是否尝试过使用文件的绝对路径而不是相对路径?
  • @DanMašek 是的,我做了这两件事,但我仍然遇到同样的问题。
  • 嗯。您是否在调试模式下尝试此操作?如果是这样,您是否链接到 SFML 的调试版本?
  • @DanMašek 是的,在调试和正常运行时都会出现同样的错误。

标签: c++ fonts sfml


【解决方案1】:

简单的答案是,当您运行可执行文件时,该文件不在在您当前的工作目录中。

尝试输入一个完全限定的文件名。它会起作用的。

使用 Visual Studio,这很可能是您的 .vcxproj 文件所在的目录。

如果这不起作用,您可以通过查看this 帖子了解您当前的工作目录是什么,以了解如何找出当前目录的通用方法。

作为一种快速破解方法,您可以在程序启动时创建一个文件。启动一次并检查文件的创建位置。这是当前目录。

【讨论】:

    【解决方案2】:

    我解决了这个问题:

    sf::Font font;
    if (!font.loadFromFile("../arial.ttf")){
       return EXIT_FAILURE;
    }
    

    我也在使用 SMFL 的 Ubuntu 上使用 CLion。

    【讨论】:

      【解决方案3】:

      此外,当我认为我已经正确输入了所有内容时,我遇到了同样的错误。最终成为问题的是我为字体文件编写了 .tff 而不是 .ttf,一旦更正,问题就解决了。

      【讨论】:

        【解决方案4】:

        我的 TTF 文件从其存档中提取后没有任何权限。 chmod 644 font.ttf 解决了这个问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-06-05
          • 2014-06-26
          • 1970-01-01
          • 2018-08-26
          • 1970-01-01
          • 2012-02-10
          • 1970-01-01
          • 2011-04-08
          相关资源
          最近更新 更多