无法在Allegro中加载字体

时间:2012-12-24 01:51:27

标签: c++ visual-studio visual-studio-2012 allegro allegro5

我正在使用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两者都没有用。我也尝试将它添加到我的项目中的“Resource Files”文件夹中,但这也不起作用。

有关可能发生的事情的任何建议吗?

感谢。

2 个答案:

答案 0 :(得分:3)

需要说的一切都在这里:

答案 1 :(得分:0)

我知道这是一个古老的问题,但是我刚刚找到它并按照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()