Аллегро С++ al_draw_textf ()

Мой вопрос связан с Allegro 5 C++. Вот некоторые части моего кода, которые должны рисовать текст на экране. Я сделал все объявления, и ошибка определенно в этой части кода.

Итак, сначала я объявил глобальную переменную ALLEGRO_FONT * font; Я вызвал эту функцию в main al_init_font_addon();

А вот еще одна функция, которая рисует текст.

    void draw (){
        int score=0 ;
        while (!GetAsyncKeyState(VK_ESCAPE)){
          al_clear_to_color(al_map_rgb( 0 , 0 , 0));
          al_init_ttf_addon();
          font = al_load_font ("font.ttf" , 24 , NULL);
          al_draw_textf(font , al_map_rgb(255 , 0 , 255) , 200 , 200 , ALLEGRO_ALIGN_CENTRE   , "SCORE: %d" , score );
          al_flip_display();
          score +=10;
        }
    }

Проблема в том, что это приложение падает на шаге 507 цикла while.


person Sam379    schedule 11.06.2013    source источник
comment
Дополнительное примечание: на самом деле нет необходимости использовать специфичные для Windows функции клавиатуры, когда Allegro предоставляет кросс-платформенные подпрограммы.   -  person Matthew    schedule 12.06.2013


Ответы (1)


Вы инициализируете новый шрифт в каждом цикле, не освобождая ресурс, когда закончите с ним.

Вместо этого вызывайте al_init_ttf_addon и al_load_font только один раз перед циклом и используйте их в цикле. Не забудьте освободить шрифт, когда закончите с ним. На самом деле я рекомендую вам вызывать al_init_ttf_addon при инициализации программы, другими словами, в функции main перед входом в цикл обработки событий.

person Some programmer dude    schedule 11.06.2013