Aprendendo Allegro 5
Início Janela Imagens Mensagem Fontes e texto Eventos Mouse Teclado Audio Timer Animações Sprites Jogo exemplo

Utilizando fontes e saída de texto

Neste tutorial vamos tratar sobre como mostrar na tela mensagens de texto. Para isso, iremos também aprender a carregar arquivos de fonte. Neste exemplo iremos mostrar na tela três mensagens de texto, conforme a imagem abaixo.

// Os arquivos de cabeçalho
#include <allegro5/allegro.h>
#include <allegro5/allegro_native_dialog.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_ttf.h>

// Atributos da tela
#define LARGURA_TELA 640
#define ALTURA_TELA 480

//função que mostra mensagem de erro em uma caixa de texto nativa
//a função recebe a string da mensagem como parâmetro
void error_msg(char *text){
    al_show_native_message_box(NULL,"ERRO",
        "Ocorreu o seguinte erro e o programa sera finalizado:",
        text,NULL,ALLEGRO_MESSAGEBOX_ERROR);
}

int main(void){
    // A nossa janela
    ALLEGRO_DISPLAY *janela = NULL;

    // O nosso arquivo de fonte
    ALLEGRO_FONT *fonte = NULL;

    //tenta inciar a biblioteca, caso retorne false, mostra mensagem e encerra o programa
    if (!al_init()){
        error_msg("Falha ao inicializar a Allegro");
        return -1;
    }

    // Inicialização do add-on para uso de fontes
    al_init_font_addon();

    // Inicialização do add-on para uso de fontes True Type
    if (!al_init_ttf_addon()){
        error_msg("Falha ao inicializar add-on allegro_ttf");
        return -1;
    }

    // Criação da nossa janela
    janela = al_create_display(LARGURA_TELA, ALTURA_TELA);
    if (!janela){
        error_msg("Falha ao criar janela");
        return -1;
    }

    // Carregando o arquivo de fonte
    fonte = al_load_font("arial.ttf", 48, 0);
    if (!fonte){
        al_destroy_display(janela);
        error_msg("Falha ao carregar fonte");
        return -1;
    }

    // Preenchemos a tela com a cor branca
    al_clear_to_color(al_map_rgb(255, 255, 255));

    // Texto alinhado à esquerda
    al_draw_text(fonte, al_map_rgb(255, 0, 0), 10, 10, ALLEGRO_ALIGN_LEFT, "Esquerda");

    // Texto alinhado à direita
    al_draw_text(fonte, al_map_rgb(0, 0, 255), LARGURA_TELA - 10, 50, ALLEGRO_ALIGN_RIGHT, "Direita");

    // Texto centralizado
    al_draw_text(fonte, al_map_rgb(0, 255, 0), LARGURA_TELA / 2, 90, ALLEGRO_ALIGN_CENTRE, "Centro");

    // Exemplo de impressão de valores variáveis
    int i = 4;
    char texto[50] = "formatado";
    al_draw_textf(fonte, al_map_rgb(0, 0, 0), LARGURA_TELA / 2, 250, ALLEGRO_ALIGN_CENTRE, "Texto %d: %s", i, texto);

    // Atualizamos a tela
    al_flip_display();

    // E aguardamos 10 segundos
    al_rest(10.0);

    // Desalocação da fonte e da janela
    al_destroy_font(fonte);
    al_destroy_display(janela);

    return 0;
}

Nas linhas 4 e 5 fazemos um include nas bibliotecas dos addons allegro_font e allegro_ttf, que possuem as funções que permitem trabalhar com as fontes.

13-17

Na linha 13 criamos a função error_msg para facilitar a tarefa de mostrar mensagens de erro. Como pode-se notar mais a frente no código, neste tutorial estamos verificando se cada chamada de função apresentou erro (retornou NULL) ou não:

Na inicialização do allegro

26-30

Addon de fontes ttf

35-39

Criação do display

41-46

Carregamento da fonte

48-54
Em caso de erro, mostramos uma mensagem com o al_show_native_message_box e encerramos o programa com return -1.

ALLEGRO_FONT

Na linha 24 declaramos nossa variável que irá receber a fonte que será usada ao mostrar textos na tela.

al_init_font_addon() e al_init_ttf_addon()

Na linha 33 iniciamos o addon de fontes do allegro, e na linha 36 o addon de fontes ttf (True Type Font). Este segundo serve para o uso de fontes arquivos de fontes .ttf.

al_load_font()

Na linha 49 chamamos a função al_load_font(), que serve para carregar uma fonte de um arquivo para ser usada como fonte no programa. A função recebe uma strings, contendo o caminho do arquivo (ou nome, se estiver na mesma pasta), o tamanho da fonte, em pixels, e o terceiro parâmetro são flags de renderização da fonte,0 como padrão (consulte referência para mais detahes).

O programa então pinta a janela com a cor branca na linha 57.

al_draw_text()

Nas linhas 60, 63 e 66 chamamos a função al_draw_text(), que serve para escrever um texto na tela. A função recebe como parâmetro a fonte (ALLEGRO_FONT), a cor do texto (por isso usamos a função al_map_rgb() para montar a cor), as coordenadas X e Y onde o texto aparecerá, a flag de alinhamento horizontal do texto, e a string contendo o texto. Os possíveis valores para a flag de alinhamento horizontal são os seguintes:

  • ALLEGRO_ALIGN_LEFT - Posição X informada corresponde ao canto esquerdo do texto.
  • ALLEGRO_ALIGN_CENTRE - Centro do texto localizado na posição X informada.
  • ALLEGRO_ALIGN_RIGHT - Posição X informada corresponde ao canto direito do texto.

al_draw_textf()

Na linha 71 usamos a função al_draw_textf(), que funciona de maneira semelhante à al_draw_text(). A diferença é que ela recebe um texto formatado, como a conhecida função printf().

Após isso, atualizamos a tela (linha 74), paramos o programa por 10 segundos (linha 77) e desalocamos a fonte (linha 80) e janela (linha 81). O resultado é um programa que irá mostrar as 4 mensagens de texto na tela por 10 segundos.

Download dos arquivos

Outros links