3

我在 C++ 和 Visual Studio 2012 中使用 Allegro 5,但由于某种原因,我无法使用 Allegro wiki 中的示例代码加载字体:

    ALLEGRO_FONT *font = al_load_ttf_font("pirulen.ttf",72,0 );

   if (!font){
      fprintf(stderr, "Could not load 'pirulen.ttf'.\n");
      return false;
   }

   al_clear_to_color(al_map_rgb(50,10,70));
   al_draw_text(font, al_map_rgb(255,255,255), 640/2, (480/4),ALLEGRO_ALIGN_CENTRE, "It worked!");

我已经尝试将字体文件放置在我的 Visual Studio 项目中的每个可行目录中,以及 .exe 所在的目录中(正如其他几个线程所建议的那样)。我还尝试将它的副本放在 C: 驱动器上并使用完全限定的路径调用它:我尝试过C:\\pirulen.ttfC:/pirulen.ttf但都没有奏效。我也尝试将它添加到我项目中的“资源文件”文件夹中,但这也不起作用。

关于可能发生的事情有什么建议吗?

谢谢。

4

2 回答 2

3

需要说的都在这里:

于 2012-12-24T04:35:20.100 回答
1

我知道这是一个古老的问题,但我刚刚找到它并阅读了 Matthew 建议的文档(每个人都应该这样做),所以我想我会在此处添加此内容以供其他人寻找简单答案。

如果您愿意,您可以为每个资源创建一个路径,但使用它al_change_directory来设置您的资源目录更容易,然后您可以在那里找到您的资产。

al_init_font_addon(); // initialize the font addon
al_init_ttf_addon();// initialize the ttf (True Type Font) addon

ALLEGRO_PATH *path = al_get_standard_path(ALLEGRO_RESOURCES_PATH);
al_append_path_component(path, "resources");
al_change_directory(al_path_cstr(path, '/'));
al_destroy_path(path);

然后您可以引用相对于resource根的路径。

ALLEGRO_FONT* font = al_load_ttf_font("LibreCaslonText-Bold.ttf", 72, 0);

// Check font is loaded
if (!font) {
    fprintf(stderr, "failed to load font!\n");
    al_destroy_font(font);
    return -1;
}

澄清LibreCaslonText-Bold.ttf存在于project_dir/resources/LibreCaslonText-Bold.ttf

边注

就我而言,我还需要将资源复制到我的构建目录中。所以我将此添加到我的CMakeLists.txt.

if (NOT ${PROJECT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
    file(COPY "${PROJECT_SOURCE_DIR}/resources" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
endif()
于 2019-06-20T16:50:35.063 回答