| |
 |
| |
Biblioteca Allegro
A biblioteca allegro fornece várias rotinas de baixo nível para programadores de C/C++,
normalmente necessárias na programação de jogos, como entrada do teclado, manipulação
de gráficos, manipulação de sons e cronômetros (timer).
É uma plataforma transversal e
trabalha com muitos compiladores diferentes. Desenvolvido originalmente por Shawn Hargreaves,
é agora um projeto com contribuições do mundo inteiro.
Algumas características chaves incluem:
Facilidade de utilização - Vem com documentação e exemplos detalhados.
Portátil - Se a funcionalidade interna não for bastante, há muitos add-ons disponíveis
em todas plataformas - sem mudar uma única linha do código, você pode criar versões para
Windows, OS X, Linux, DOS e outros! Trabalhe com muitos compiladores, incluindo DJGPP e VC++
Fonte aberta - qualquer um pode contribuir, inclusive você!
Livre - não lhe custará uma moeda de dez centavos, e não há nenhuma limitação em seu uso.
Para mais informações referente a biblioteca allegro visite o site:
http://www.allegro.cc
O objetivo de Allegro.cc é fornecer uma riqueza da informação moderna que pertence à programação
e ao gaming Allegro. Eles confiam pesadamente na participação dos colaboradores Allegro e do público
geral. Nesse mesmo site existem publicações de vários jogos, quase todos são freewares e sharewares.
Antes de instalar qualquer jogo o Allegro recomenda ler a documentação completa de cada um porque
eles não serão responsáveis por qualquer problema que ocorrer após a instalação.
VOCÊ PRECISA
SABER...
Em outras palavras Allegro é uma biblioteca desenvolvida para ajudar os programadores iniciantes no
desenvolvimento de jogos sem que seja necessário ler toneladas de livros referentes o assunto.
Basicamente, para que você possa desenvolver um jogo simples e divertido é necessário
ter um bom conhecimento de qualquer linguagem de programação, criatividade e um bom conhecimento em
bibliotecas gráficas como Allegro, Open GL, Direct x entre outros. |
|
ENTENDO O LAÇO PRINCIPAL DO JOGO
Logo acima vimos que a biblioteca Allegro parece ser uma ferramenta com várias funcionalidades no processo
de desenvolvimento de um jogo.
Só o fato de não precisarmos ler toneladas de livros sobre matemática,
física e APIs já poupa um tempo muito precioso.
Isso não quer dizer que para desenvolver um jogo comercial
de sucesso basta aprender Allegro.
O conhecimento vai muito mais além da simplicidade. De qualquer forma
você vai precisar estudar muito para desenvolver um jogo bom.
Vamos começar pelo inicio do inicio, entendendo o laço principal e utilizando a biblioteca Allegro para
chamar as funções.
O código abaixo já é um bom começo:
Ao executar o programa você vai ver apenas uma tela do windows com a cor de fundo em preto.
Para fechar o programa pressione ESC.
CÓDIGO
//Exemplo de código em Allegro
#include <allegro.h>
int main()
{
allegro_init();
install_keyboard();
set_color_depth(16);
set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0 );
// Laço principal
while( !key[KEY_ESC] )
{
//Código
}
allegro_exit();
return 0;
}
END_OF_MAIN();
FIM DE CÓDIGO...
| #include <allegro.h> |
Esse comando é o mais importante. Sem declarar essa linha não vamos conseguir
usar nenhuma função da biblioteca Allegro. Ao chamar as funcões do Allegro e tentar
compilar o jogo sem essa linha o compilador irá apresentar uma mensagem de erro dizendo
que não conseguiu encontrar as funções.
VOCÊ PRECISA
SABER...
Esse comando indica ao compilador onde ele deve encontrar
as funções do allegro. |
|
|
| int allegro_init(); |
Macro responsável por iniciar a biblioteca allegro.
Sem esse comando não conseguimos
utilizar nenhuma função do allegro.
Existem pessoas que utilizam a função allegro_exit(), mas o manual do allegro 4.2.1
informa que esse comando não precisa ser usado explicitamente. O allegro chama essa
função toda vez que o jogo é fechado. Dessa forma o processo de liberação das
bibliotecas da memória tornam-se automáticos.
|
| int install_keyboard(); |
Esse comando é responsável por instalar e tornar as interrupções do
teclado disponíveis para o nosso projeto.
Mais adiante vamos ver um topico de
como manipular as interrupções do teclado.
|
| void set_color_depth(int depth); |
Essa função seta a profundidade das cores de todas as
imagens que você vai carregar durante o projeto. O allegro suporta:
| 8 bits |
256 cores |
| 16 bits |
65.536 mil |
| 24 bits |
16,7 milhões |
| 32 bits |
16,7 milhões |
|
Exemplo: set_color_depth(32);
O modo 32 bits proporciona o mesmo número de cores que o
modo 24 bits, mas gráficos de 32 bits podem ser manipulados muito mais
rapidamente do que gráficos de 24 bits. Além disso, gráficos de 32 bits
requerem cerca de 25% a mais de memória.
|
| int set_gfx_mode(int card, int w, int h, int v_w, int v_h); |
O comando acima é responsável por detectar a placa de vídeo, setar o tamanho da tela em pixel e o posicionamento inicial x,y.
Para saber o que utilizar no argumento card segue uma tabela abaixo explicando cada opção:
| Card |
Descrição |
GFX_TEXT |
Fecha toda a modalidade de gráficos aberta previamente
com set_gfx_mode. |
GFX_AUTODETECT |
O allegro escolhe o drive mais apropriado. |
GFX_AUTODETECT_FULLSCREEN |
Força o allegro a exibir o projeto em tela cheia. |
GFX_AUTODETECT_WINDOWED |
Força o allegro a exibir o projeto em uma janela. |
GFX_SAFE |
Modo especial para quando você quiser ajustar confiantemente uma
modalidade de gráficos e não quer se importar a resolução. |
GFX_BWINDOWSCREEN_ACCEL |
Modalidade exclusiva de Tela cheia. Suporta definições de pixels
somente acima ou igual a 640x480.Suporta também aceleração de hardware. |
GFX_BWINDOWSCREEN |
Modalidade idêntica a anterior mas não suporta aceleração de
hardware. |
GFX_BDIRECTWINDOW |
Modo gráfico rápido para utilização de janelas porque usa a
classe BdirectWindow. Mas nem todas as placas de vídeos suportam. |
GFX_BWINDOW |
Modo normal de trabalho em janela utilizando a classe Bwindow.
Esse modo é muito lento. |
GFX_BWINDOW_OVERLAY |
Modalidade de tela cheia usando BWindow como uma folha de prova
BBitmap. Esta modalidade não é suportada por todos as placas de vídeos, a
profundidade de cores sugeridas é 15, 16 e 32 bits. |
|
Exemplo:
set_gfx_mode(GFX_AUTODETECT_WINDOWED,640, 480, 0, 0);
O exemplo acima define a tela do jogo como sendo auto detectável em modo
janela do windows,
640x480 pixels de resolução a partir da posição x= 0 e y=0. |
| void vsync(); |
Espera para que um retrace
vertical começa.
O retrace acontece quando o feixe de elétron em seu monitor
alcançou o fundo da tela e está movendo para trás para o superior, e se apronta
para uma outra varredura.
Durante este período curto o cartão dos gráficos
não está emitindo nenhum dado ao monitor, assim você pode fazer-lhe as
coisas que não são possíveis em outras vezes, tais como alterar o palette de
cores sem causar cintilar (neve).
O Allegro esperará automaticamente um
retrace antes de alterar o palette ou de fazer algum desdobramento da
ferragem, embora, assim que você não necessita normalmente se incomodar com
esta função.
Essa explicação é muito importante porque o uso do comando vsync no meio do
projeto causa uma perda considerável de desempenho.
|
| while (!key[KEY_ESC]) {} |
O comando acima trata-se do loop principal do jogo. Ele quer dizer
que fará o loop enquanto ninguém pressionar a tecla ESC.
Dessa forma ele executa o
código do jogo em velocidade de processamento.
Mais adiante veremos tópicos
relacionados ao timer para controlar o loop do jogo.
|
Caro leitor, chegamos ao fim do entendimento do laço principal de um jogo.
Se você
Encontrou alguma dificuldade no entendimento desse artigo favor entrar em contato.
Agora se prepare porque com essa tela preta dá pra fazer muita coisa!!!
Abraço - BDJogos
Contribuidor
Bruno A. Rovela
07/06/2007
| |