Tutorial Allegro 5 #2 – Colocando uma Imagem na Tela

Padrão

Aqui estamos nós novamente, para o segundo post da série sobre programação de jogos usando a Allegro 5. No post de hoje, veremos como carregar uma imagem e colocá-la na tela.

Já disse no último post que a Allegro 5 possui uma série de add-ons que possibilitam muitas facilidades ao desenvolvimento. Além disso, a divisão em add-ons é útil para que você não tenha que colocar uma porção de funções que não usa na hora de distribuir seu jogo. Você inclui somente as bibliotecas que utilizou, diminuindo consideravelmente o tamanho.

Na versão atual da biblioteca (versão 5.0.4), os add-ons disponíveis são os seguintes:

  • allegro: as funções de núcleo
  • allegro_main: a biblioteca de compatibilidade que permite a função main() funcionar em todos os compiladores. Requerida apenas do OS X
  • allegro_acodec: codecs de áudio, como Ogg e Wav
  • allegro_audio: o subsistema básico de áudio
  • allegro_color: conversão entre vários formatos de cor
  • allegro_dialog: caixas de diálogo nativas, como “abrir arquivo…”
  • allegro_font: fontes bitmap básicas
  • allegro_image: formatos de imagem, como JPEG e PNG
  • allegro_memfile: uma interface para carregar arquivos da memória
  • allegro_physfs: uma interface para carregar arquivos de locais abstratas, como arquivos Zip
  • allegro_primitives: funções básicas de desenho, como retângulos e linhas
  • allegro_ttf: carregamento arquivos .ttf

Como pode ser visto, dá pra fazer bastante coisa com os add-ons que antes, com o Allegro 4, só estava disponível com o uso de bibliotecas de terceiros.

Bom, neste segundo tutorial, utilizaremos o add-on allegro_image para carregarmos uma imagem e a mostrarmos na tela. Com o uso desta biblioteca, podemos utilizar diversos tipos de imagens (Bitmap, PNG, JPEG…).

Assim como no outro tutorial, vamos dar uma olhada no código e em seguida vou explicando o que tem de novo nele. Também estou usando a linguagem C.

// Inclui o cabeçalho da bibilioteca Allegro 5
#include <allegro5/allegro.h>

// Inclui o cabeçalho do add-on para uso de imagens
#include <allegro5/allegro_image.h>

int main(void)
{
    // Variável representando a janela principal
    ALLEGRO_DISPLAY *janela = NULL;

    // Variável representando a imagem
    ALLEGRO_BITMAP *imagem = NULL;

    // Inicializa a Allegro
    al_init();

    // Inicializa o add-on para utilização de imagens
    al_init_image_addon();

    // Configura a janela
    janela = al_create_display(640, 480);

    // Carrega a imagem
    imagem = al_load_bitmap("sunshine.jpg");

    // Desenha a imagem na tela
    al_draw_bitmap(imagem, 0, 0, 0);

    // Atualiza a tela
    al_flip_display();

    // Segura a execução por 10 segundos
    al_rest(10.0);

    // Finaliza a janela
    al_destroy_display(janela);

    return 0;
}

Em relação ao último tutorial, temos apenas diferenças pequenas. Em primeiro lugar, adicionamos o arquivo de cabeçalho correspondente ao add-on allegro_image. Além disso, declaramos uma variável do tipo ALLEGRO_BITMAP (ponteiro, assim como quase tudo no Allegro) que representará a nossa imagem. Além disso, para utilizar o add-on, é preciso realizar uma chamada a al_init_image_addon() que inicializa as engines de renderização dos formatos de imagem disponíveis no sistema. Da mesma forma como a função de inicialização da Allegro, não é necessário chamar a função de encerramento, já que ela é executada automaticamente quando o programa é encerrado.

Além dessa parte de inicialização, temos a função que carrega o nosso arquivo de imagem (função al_load_bitmap), que simplesmente recebe o caminho relativou ou absoluto da imagem a ser carregada, retornando um ponteiro para o tipo ALLEGRO_BITMAP. Por fim, temos a função que desenha a nossa imagem no bitmap ativo (lembra que eu falei da máquina de estados no primeiro tutorial?). A função al_draw_bitmap recebe como parâmetros o bitmap a ser desenhado, a posição x, a posição y e as flags de espelhamento ALLEGRO_FLIP_HORIZONTAL e/ou ALLEGRO_FLIP_VERTICAL. Como no exemplo não pretendemos alterar a imagem original, passamos 0 no último argumento.

No mais, atualizamos a tela e deixamos ela ativa por 10 segundos. O resultado deve ser algo parecido com isso (qualquer imagem em 640×480 deve ficar boa):

Para compilar, coloque as seguintes flags no linker:

  • no Windows: -lallegro_image-5.0.4-mt -lallegro-5.0.4-mt
  • no Linux: -lallegro_image -lallegro
Bom, espero ter ajudado com mais esse tutorial e espero vocês no próximo! Comentem, opinem e deem sugestões, para que o conteúdo do blog fique cada vez melhor! Valeu! 😀