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