Tutorial Allegro 5 #1 – Criando uma Janela

Padrão

Olá pessoal!

Hoje começamos mais uma série de posts, sobre programação de jogos utilizando a biblioteca Allegro 5. Nesta série, veremos alguns conceitos fundamentais na criação de jogos, desde a manipulação de imagens e conceitos de animação, passando por manipulação de dispositivos de entrada (teclado, mouse, joystick) e gerenciamento de efeitos sonoros.

Para nos fornecer ferramentas pra tudo isso, utilizaremos a biblioteca Allegro 5. Se você está usando Windows, pode baixar os binários daqui (se usa o Code::Blocks 10.05, baixe a versão para MinGW 4.4 – se usa o DevC++, baixe a versão para MinGW 3.4.5). É só descompactar e colar na pasta do seu compilador (vai perguntar se você deseja mesclar o conteúdo das pastas bin, lib e include. Confirme) Se usa Linux, tem um tutorial sobre como compilar aqui (até o momento, somente o Fedora tem a Allegro 5 nos seus repositórios).

Bom, sem muita conversa, vamos escrever o código e vou explicando mais detalhadamente o seu funcionamento logo em seguida. Abra a sua IDE ou seu editor e digite o seguinte código. Nestes primeiros exemplos estamos utilizando a linguagem C.

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

// Nossa conhecida função main...
int main(void)
{
    // Variável representando a janela principal
    ALLEGRO_DISPLAY *janela = NULL;

    // Inicializamos a biblioteca
    al_init();

    // Criamos a nossa janela - dimensões de 640x480 px
    janela = al_create_display(640, 480);

    // Preenchemos a janela de branco
    al_clear_to_color(al_map_rgb(255, 255, 255));

    // 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;
}

Bom, neste primeiro exemplo, criaremos uma janela branca que permanecerá por 10 segundos na tela. Vamos agora explicar o código passo-a-passo.

Em relação ao Allegro 4, podemos perceber que toda a estrutura da biblioteca mudou, começando pelo próprio arquivo de cabeçalho. Agora, a Allegro tem seu próprio diretório na pasta de includes, da mesma forma que a SDL já tinha. Aliás, a Allegro 5 tem sua estrutura muito parecida com a SDL. Bom, então incluímos o arquivo do núcleo da biblioteca, o arquivo allegro.h, dentro da pasta allegro5. Apesar da Allegro possuir nesta versão vários add-ons, neste primeiro tutorial utilizaremos somente o seu núcleo.

Já dentro da função main(), declaramos a variável, do tipo ALLEGRO_DISPLAY que irá representar a nossa janela principal. Por que eu digo principal? Porque nesta versão, a Allegro permite trabalhar com múltiplas janelas. Neste caso então, declaramos apenas uma que iremos utilizar. Em seguida, inicializamos a biblioteca com a chamada a al_init(). Percebam que, também da mesma forma como SDL já fazia, a Allegro agora tem suas funções padronizadas por prefixos (no caso, al_). O ideal é tratarmos o retorno desta função, para evitar erros. Porém, neste primeiro tutorial vamos apenas realizar a chamada. Logo em seguida, inicializamos a nossa janela, com a chamada à função al_create_display(), passando como argumentos a largura e a altura da área útil da janela em pixels.

Em seguida, fazemos uma chamada a função clear_to_color(), que preenche uma superfície de uma determinada cor. Como argumento, mapeamos a cor branca (255, 255, 255) utilizando a função al_map_rgb(). Você pode estar confuso, pois não dissemos à função qual superfície deveria ser preenchida. O que acontece é que a Allegro 5 trabalha como uma máquina de estados. Como assim? Você dirá explicitamente chamando uma função que os próximos comandos deverão ser aplicados a determinada superfície, até que você mude novamente. No caso deste exemplo, ele toma automaticamente a tela como superfície atual pelo fato de ser a única e a primeira a ser criada. Nos próximos posts desta série isso ficará mais claro.

Em seguida, mandamos atualizar a tela chamando a função al_flip_display() (SDL feelings de novo…). Por fim, seguramos a execução por 10 segundos com a chamada a al_rest(), passando o tempo em segundos (podem ser usados valores fracionais para pausas em milissegundos). Por fim, destruímos a janela e finalizamos. Como pode ser visto, não é necessário chamar nenhuma função de encerramento. Por quê? Porque ao inicializarmos a Allegro 5 com a função al_init(), ela automaticamente se encarrega se registrar a função de encerramento da biblioteca com o comando atexit(). Então, não precisamos nos preocupar em fazer uma chamada explícita de encerramento da biblioteca. . . que beleza, não?

Para compilar este exemplo adicione as seguintes flags ao linker:

  • No Windows (no caso, usando a versão 5.0.4): -lallegro-5.0.4-mt
  • No Linux: -lallegro

Por fim, teremos algo semelhante a isso:

Bom pessoal… é isso! Aguardem os próximos posts, pois muita coisa bacana está vindo!

Valeu!

3 comentários sobre “Tutorial Allegro 5 #1 – Criando uma Janela

  1. Bruno Gruber

    Olá Rafael, excelente série de tutoriais sobre allegro. Gostaria de saber como manter a imagem na tela sem precisar definir um tempo de execução (“pra sempre”), como foi feito usando al_rest

  2. anonimo

    Bom dia Rafael. Estou com problema na hora de compilar o codigo, esta dando o seguinte erro:

    /tmp/cccUbGlH.o: In function `main’:

    allegro.c:(.text+0x6c): undefined reference to `al_init_image_addon’

    collect2: error: ld returned 1 exit status

Deixe uma resposta