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<br />
#include &lt;allegro5/allegro.h&gt;</p>
<p>// Nossa conhecida função main...<br />
int main(void)<br />
{<br />
    // Variável representando a janela principal<br />
    ALLEGRO_DISPLAY *janela = NULL;</p>
<p>    // Inicializamos a biblioteca<br />
    al_init();</p>
<p>    // Criamos a nossa janela - dimensões de 640x480 px<br />
    janela = al_create_display(640, 480);</p>
<p>    // Preenchemos a janela de branco<br />
    al_clear_to_color(al_map_rgb(255, 255, 255));</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 />
}

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!