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<br />
#include &lt;allegro5/allegro.h&gt;</p>
<p>// Inclui o cabeçalho do add-on para uso de imagens<br />
#include &lt;allegro5/allegro_image.h&gt;</p>
<p>int main(void)<br />
{<br />
    // Variável representando a janela principal<br />
    ALLEGRO_DISPLAY *janela = NULL;</p>
<p>    // Variável representando a imagem<br />
    ALLEGRO_BITMAP *imagem = NULL;</p>
<p>    // Inicializa a Allegro<br />
    al_init();</p>
<p>    // Inicializa o add-on para utilização de imagens<br />
    al_init_image_addon();</p>
<p>    // Configura a janela<br />
    janela = al_create_display(640, 480);</p>
<p>    // Carrega a imagem<br />
    imagem = al_load_bitmap(&quot;sunshine.jpg&quot;);</p>
<p>    // Desenha a imagem na tela<br />
    al_draw_bitmap(imagem, 0, 0, 0);</p>
<p>    // Atualiza a tela<br />
    al_flip_display();</p>
<p>    // Segura a execução por 10 segundos<br />
    al_rest(10.0);</p>
<p>    // Finaliza a janela<br />
    al_destroy_display(janela);</p>
<p>    return 0;<br />
}

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! 😀