Conheça a iniciativa da Biblioteca dos Desenvolvedores  
Índice da Biblioteca  
Área dos Usuários  
Fórum de Discussão  
Forúm
 
  Agrupando imagens com o Grabber

Nesse tutorial iremos mostrar como é feito para agrupar imagens em um único arquivo de dados.
Normalmente esses arquivos recebem a extensão “.dat”.

Independente do seu nível de experiência na área de desenvolvimento de jogos você já deve ter visto que quando terminamos um jogo a pasta de arquivos fica como a Figura 1.

ANTES


Figura 1


Como podemos ver, as imagens estão desorganizadas dentro da mesma pasta que o executável. Sem essas imagens nosso jogo não irá funcionar.
Para tornar a distribuição do jogo esteticamente melhor iremos compactar todas as imagens em um único arquivo de dados conforme a figura 2 abaixo.

DEPOIS


Figura 2

Imagens que iremos compactar:

meteoro.bmp
24bits

trofeu.bmp
24bits

nave.bmp
24bits


Siga os passos abaixo para compactar as imagens.

1) Abra o Grabber. Se você fez a instalação padrão do allegro o Grabber está na pasta C:\Dev-Cpp\bin.


2) Clique com o botão direito do mouse no fundo branco onde se encontra a legenda “(root)”.

Selecione e clique na opção New -> Bitmap.
A tela a seguir vai pedir um nome qualquer para a sua imagem sem extensão, em seguida clique em OK


3) Selecione a linha com o nome que você especificou para a sua imagem e clique com o botão direito.
Clique na opção Grab. A tecla de atalho para essa opção é Ctrl+G.

Na tela que vai aparecer você precisa selecionar a imagem que você quer compactar.

Importante: Você deverá repetir o passo 2 e 3 para todas as imagens que você querer compactar em um único arquivo.


4) Após adicionar todas as imagens selecione a opção “Global compression” que se econtra no canto superior direito da tela. Essa opção diminui um pouco o tamanho das imagens.



5) Finalmente, clique no menu File -> Save.

Ta tela que irá aparecer escolha o nome do arquivo no topo da janela e clique em OK.
Nesse exemplo o nome do arquivo é imagens.dat. Uma tela de sucesso deverá aparecer.

Se você seguiu todos os passos e utilizou as imagens desse tutorial teremos um arquivo imagens.dat com 3 imagens, trofeu.bmp, nave.bmp e meteoro.bmp. A seguir iremos mostrar como carregar essas imagens no Allegro.
Vamos usar o arquivo de dados imagens.dat gerado no processo citado acima.

Vamos ilustrar 2 exemplos diferentes de código.
CÓDIGO...
#include <allegro.h>

// exemplo 1

int main()
{
   allegro_init();
   set_color_depth(32);
   install_keyboard();
   set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);

   BITMAP *Buffer = NULL;
   Buffer = create_bitmap( SCREEN_W ,SCREEN_H );

   DATAFILE *datImagens = NULL;
   datImagens = load_datafile("Imagens.dat");


   while (!key[KEY_ESC])
   {
      clear_bitmap(Buffer);
      textprintf_ex(Buffer, font, 0, 0, makecol(0, 255, 255),-1,"IMAGENS");

      draw_sprite(Buffer,(BITMAP *)datImagens[2].dat,250,200);
      blit(Buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);
      vsync();
   }

   unload_datafile(datImagens);

   destroy_bitmap(Buffer);
   delete Buffer;
   allegro_exit();
   return 0;
}
END_OF_MAIN();


FIM DE CÓDIGO

No exemplo acima criamos um ponteiro do dipo DATAFILE em seguida apontamos o ponteiro para o arquivo Imagens.dat.
Dessa forma sempre que utilizamos uma imagem desse ponteiro precisamos tornar explicito para o compilador que o conteudo que iremos usar é do tipo BITMAP.

Assim o comando para utilizar as imagens do arquivo segue abaixo:

(BITMAP *)datImagens[2].dat

Dentro do arquivo as imagens estarão organizadas como um array, sempre iniciando o indice do zero. Nesse caso, o número 2 indica a imagem do trofeu.


CÓDIGO...

#include <allegro.h>

// exemplo 2

int main()
{
   allegro_init();
   set_color_depth(32);
   install_keyboard();
   set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);

   BITMAP *Buffer = NULL;
   Buffer = create_bitmap(SCREEN_W,SCREEN_H);

   DATAFILE *datImagens = NULL;
   datImagens = load_datafile("Imagens.dat");


   BITMAP *imgTrofeu = NULL;
   imgTrofeu = create_bitmap(75,90);
   imgTrofeu = (BITMAP *)datImagens[2].dat;

   while (!key[KEY_ESC])
   {
      clear_bitmap(Buffer);
      textprintf_ex(Buffer, font, 0, 0, makecol(0, 255, 255),-1,"IMAGENS");

      draw_sprite(Buffer,imgTrofeu,250,200);
      blit(Buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);
      vsync();
   }

   unload_datafile(datImagens);
   delete imgTrofeu;

   delete Buffer;
   allegro_exit();
   return 0;
}
END_OF_MAIN();


FIM DE CÓDIGO

O exemplo numero 2 mostra exatamente o mesmo resultado do exemplo numero 1.
Apenas foi escrito de forma diferente.

Existem outras formas de se fazer,
cabe a você entender o processo e montar o procedimento de carregamento das imagens da melhor maneira possivel para o seu jogo.



Abraço
BDJogos



Contribuidor
Bruno A. Rovela
25/09/2007

Voltar

 
 

01/06/2007 (C) Copyright. Todos os Direitos Reservados. Leia a política de privacidade do portal.
É proibida a cópia de conteúdo deste site de acordo com a Lei Brasileira de Direitos Autorais.