Download ppt - Biblioteca Allegro

Transcript
Page 1: Biblioteca Allegro

Visão Geral e Introdução à Visão Geral e Introdução à Biblioteca Allegro para Biblioteca Allegro para Programação de JogosProgramação de Jogos

Autor: Pedro DemasiAutor: Pedro Demasi

E-mail: [email protected]: [email protected]

Page 2: Biblioteca Allegro

Instalando o AllegroInstalando o Allegro

http://www.talula.demon.co.uk/allegro/ (há http://www.talula.demon.co.uk/allegro/ (há link para um mirror em Português).link para um mirror em Português).

Criar um diretório (c:\djgpp\allegro) e Criar um diretório (c:\djgpp\allegro) e descompactar (matendo estrutura).descompactar (matendo estrutura).

Rodar o make (pode demorar bastante).Rodar o make (pode demorar bastante). Verificar se c:\djgpp\allegro\allegro.h está Verificar se c:\djgpp\allegro\allegro.h está

também em c:\djgpp\include e se c:\djgpp\também em c:\djgpp\include e se c:\djgpp\allegro\lib\djgpp\liballeg.a está em c:\djgpp\allegro\lib\djgpp\liballeg.a está em c:\djgpp\lib (se não estiverem, copiar manualmente).lib (se não estiverem, copiar manualmente).

Page 3: Biblioteca Allegro

Passos BásicosPassos Básicos Todo programa deve ser compilado com Todo programa deve ser compilado com

a opção -lalleg. a opção -lalleg. Exemplo: gcc prog.c -o prog.exe -lallegExemplo: gcc prog.c -o prog.exe -lalleg Incluir diretiva Incluir diretiva #include <allegro.h>#include <allegro.h>, ,

sempre sempre depoisdepois de todos os includes das de todos os includes das bibliotecas padrão (stdlib, stdio etc.)bibliotecas padrão (stdlib, stdio etc.)

No RHIDE: menu Options/Libraries, No RHIDE: menu Options/Libraries, escrever escrever allegalleg no primeiro espaço vazio e no primeiro espaço vazio e selecionar a caixa ao lado.selecionar a caixa ao lado.

Page 4: Biblioteca Allegro

Configurações IniciaisConfigurações Iniciais Deve sempre aparecer uma chamada à função Deve sempre aparecer uma chamada à função

allegro_init()allegro_init() o mais perto possível do início do o mais perto possível do início do programa.programa.

Da mesma forma devem ser chamadas, a seguir, Da mesma forma devem ser chamadas, a seguir, as funções as funções install_keyboard()install_keyboard(), , install_mouse()install_mouse() e e install_timer()install_timer(). Nota: as funções normais do C . Nota: as funções normais do C para teclado não irão mais funcionar.para teclado não irão mais funcionar.

A função A função allegro_exit()allegro_exit() deve ser chamada no deve ser chamada no final do programa.final do programa.

Page 5: Biblioteca Allegro

Configurando o SomConfigurando o Som

Iniciando usando a função Iniciando usando a função install_soundinstall_sound::

if(install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL) < 0)if(install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL) < 0){{ /* Mensagem de Erro *//* Mensagem de Erro */}}

Acertando o volume usando a função Acertando o volume usando a função set_volumeset_volume::

set_volume(255,255); /* som digital e música; 0 a 255 */set_volume(255,255); /* som digital e música; 0 a 255 */

Page 6: Biblioteca Allegro

Configurando o Modo Configurando o Modo GráficoGráfico

Iniciando usando a função Iniciando usando a função set_gfx_modeset_gfx_mode::

#define MAX_X 640#define MAX_X 640#define MAX_Y 480#define MAX_Y 480

(...)(...)

if(set_gfx_mode(GFX_AUTODETECT,MAX_X,MAX_Y,0,0) < 0)if(set_gfx_mode(GFX_AUTODETECT,MAX_X,MAX_Y,0,0) < 0){{ /* Mensagem de Erro *//* Mensagem de Erro */}}

MAX_X e MAX_Y indicam a resolução a ser usada. MAX_X e MAX_Y indicam a resolução a ser usada. Neste exemplo, 640x480.Neste exemplo, 640x480.

Page 7: Biblioteca Allegro

Configurando o Modo Configurando o Modo GráficoGráfico

Definindo o número de cores usando a função Definindo o número de cores usando a função set_color_depthset_color_depth::

set_color_depth(8); /* 256 cores */set_color_depth(8); /* 256 cores */set_color_depth(16); /* 65536 cores */set_color_depth(16); /* 65536 cores */set_color_depth(24); /* 32 milhões de cores */set_color_depth(24); /* 32 milhões de cores */set_color_depth(32); /* 4 bilhões de cores */set_color_depth(32); /* 4 bilhões de cores */

O número indica a quantidade de bits.O número indica a quantidade de bits. A chamada a essa função deve ser feita A chamada a essa função deve ser feita antesantes da chamada à função da chamada à função set_gfx_modeset_gfx_mode.. O default é 8 (ou seja, 256 cores).O default é 8 (ou seja, 256 cores).

Page 8: Biblioteca Allegro

Esqueleto de ProgramaEsqueleto de Programa#include <stdlib.h>#include <stdlib.h>#include <allegro.h>#include <allegro.h>

#define MAX_X 640#define MAX_X 640#define MAX_Y 480#define MAX_Y 480

int inicia(void)int inicia(void){{ allegro_init(); install_keyboard();allegro_init(); install_keyboard(); install_mouse(); install_timer();install_mouse(); install_timer(); if (install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL) < 0)if (install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL) < 0) {{ printf("Erro ao tentar iniciar placa de som!\n");printf("Erro ao tentar iniciar placa de som!\n"); return(FALSE);return(FALSE); }} set_volume(255,255);set_volume(255,255); set_color_depth(8);set_color_depth(8); if (set_gfx_mode(GFX_AUTODETECT,MAX_X,MAX_Y,0,0) < 0)if (set_gfx_mode(GFX_AUTODETECT,MAX_X,MAX_Y,0,0) < 0) {{ printf("Erro ao tentar iniciar modo de video!\n");printf("Erro ao tentar iniciar modo de video!\n"); return(FALSE);return(FALSE); }} return(TRUE);return(TRUE);}}

void main(void)void main(void){{ if (!inicia()) exit(-1);if (!inicia()) exit(-1);

/* continua o programa *//* continua o programa */

allegro_exit();allegro_exit();}}

Page 9: Biblioteca Allegro

Usando o SomUsando o Som Som digital: WAV ou VOC. Música: MID.Som digital: WAV ou VOC. Música: MID. Antes de se tocar um som digital ou Antes de se tocar um som digital ou

música deve-se carregá-los da seguinte música deve-se carregá-los da seguinte forma:forma:

/* declaração das variáveis que guardarão sons e músicas *//* declaração das variáveis que guardarão sons e músicas */SAMPLE *som1,*som2; /* SAMPLE = arquivos de som digital */SAMPLE *som1,*som2; /* SAMPLE = arquivos de som digital */MIDI *musica; /* MIDI = arquivos de música */MIDI *musica; /* MIDI = arquivos de música */

/* carrega os arquivos usando-se as respectivas funções *//* carrega os arquivos usando-se as respectivas funções */som1 = load_wav(“arquivo.wav”); /* para arquivos wav */som1 = load_wav(“arquivo.wav”); /* para arquivos wav */som2 = load_voc(“arquivo.voc”); /* para arquivos voc */som2 = load_voc(“arquivo.voc”); /* para arquivos voc */musica = load_midi(“arquivo.mid”); /* para arquivos mid */musica = load_midi(“arquivo.mid”); /* para arquivos mid */

Ponteiro nulo -> arquivo não encontrado.Ponteiro nulo -> arquivo não encontrado.

Page 10: Biblioteca Allegro

Usando o SomUsando o Som Para tocar uma música usa-se a função Para tocar uma música usa-se a função

play_midiplay_midi. O primeiro parâmetro é o . O primeiro parâmetro é o arquivo MIDI carregado, o segundo arquivo MIDI carregado, o segundo indica se ele tocará em loop ou não.indica se ele tocará em loop ou não.

/* Exemplo para tocar um arquivo MIDI *//* Exemplo para tocar um arquivo MIDI */MIDI *musica; /* declaração da variável a ser usada */MIDI *musica; /* declaração da variável a ser usada */musica = load_midi(“musica.mid”); /* carrega arquivo */musica = load_midi(“musica.mid”); /* carrega arquivo */play_midi(musica,TRUE); /* toca a música em loop */play_midi(musica,TRUE); /* toca a música em loop */

Para parar de tocar uma música Para parar de tocar uma música usa-se a função usa-se a função stop_mid()stop_mid(). .

Page 11: Biblioteca Allegro

Usando o SomUsando o Som Para tocar um som digital usa-se a função Para tocar um som digital usa-se a função play_sampleplay_sample. .

Os cinco parâmetros indicam: arquivo carregado, volume Os cinco parâmetros indicam: arquivo carregado, volume (0 a 255), equilíbrio entre as caixas (0 a 255, 128 é meio (0 a 255), equilíbrio entre as caixas (0 a 255, 128 é meio a meio), freqüência (1000 usa a freqüência original, 500 a meio), freqüência (1000 usa a freqüência original, 500 usa a metade da freqüência original etc.) e se vai ser usa a metade da freqüência original etc.) e se vai ser tocado em loop (função tocado em loop (função stop_sample()stop_sample() pára de tocar). pára de tocar).

/* Exemplo para tocar um arquivo de som WAV *//* Exemplo para tocar um arquivo de som WAV */SAMPLE *som; /* declaração da variável a ser usada */SAMPLE *som; /* declaração da variável a ser usada */som = load_wav(“som.wav”); /* carrega arquivo */som = load_wav(“som.wav”); /* carrega arquivo */play_midi(musica,255,128,1000,FALSE); /* toca som */play_midi(musica,255,128,1000,FALSE); /* toca som */

Page 12: Biblioteca Allegro

Usando o TecladoUsando o Teclado A função A função clear_keybuf()clear_keybuf() esvazia o buffer esvazia o buffer

de teclado.de teclado. A função A função keypressed()keypressed() retorna FALSE se retorna FALSE se

o buffer de teclado estiver vazio (ou o buffer de teclado estiver vazio (ou seja, nenhuma tecla pressionada) e seja, nenhuma tecla pressionada) e TRUE caso contrário. Equivale à função TRUE caso contrário. Equivale à função kbhit()kbhit() da biblioteca da biblioteca conio.hconio.h..

O vetor O vetor key[]key[] contém o estado das contém o estado das teclas (TRUE se pressionadas).teclas (TRUE se pressionadas).

Page 13: Biblioteca Allegro

Usando o TecladoUsando o Teclado O vetor O vetor key[]key[] vai de 0 a 127. Mas existem vai de 0 a 127. Mas existem

constantes definidas para auxiliar a verificar constantes definidas para auxiliar a verificar a tecla desejada no formato a tecla desejada no formato KEY_TECLAKEY_TECLA..

Exemplos: key[KEY_ENTER], key[KEY_A], Exemplos: key[KEY_ENTER], key[KEY_A], key[KEY_LEFT], key[KEY_ESC], key[KEY_P], key[KEY_LEFT], key[KEY_ESC], key[KEY_P], key[KEY_B], key[KEY_SPACE] etc.key[KEY_B], key[KEY_SPACE] etc.

Exemplo: abortando um programa se a tecla Exemplo: abortando um programa se a tecla ESC for pressionada:ESC for pressionada:

if (key[KEY_ESC]) allegro_exit();if (key[KEY_ESC]) allegro_exit();

Page 14: Biblioteca Allegro

Usando o TecladoUsando o Teclado

A função A função readkey()readkey() retorna a próxima tecla retorna a próxima tecla do buffer de teclado ou, se este estiver vazio, do buffer de teclado ou, se este estiver vazio, espera que uma seja pressionada e a espera que uma seja pressionada e a retorna.retorna.

2 bytes, o primeiro contém o scan code, o 2 bytes, o primeiro contém o scan code, o segundo contém o código ASCII.segundo contém o código ASCII.

Para se obter apenas o código ASCII:Para se obter apenas o código ASCII:

/* equivalente a /* equivalente a ch = getch();ch = getch(); usando conio.h */ usando conio.h */ch = readkey() & 0xFF;ch = readkey() & 0xFF;

Page 15: Biblioteca Allegro

Usando o TecladoUsando o Teclado

Exemplos de uso de teclado:Exemplos de uso de teclado:/* Esvazia o buffer *//* Esvazia o buffer */clear_keybuf();clear_keybuf();

/* fica em loop até que uma tecla seja pressionada *//* fica em loop até que uma tecla seja pressionada */while (!keypressed());while (!keypressed());

/* fica em loop até a tecla ENTER ser pressionada *//* fica em loop até a tecla ENTER ser pressionada */while (!key[KEY_ENTER]);while (!key[KEY_ENTER]);

/* aguarda uma tecla e verifica se foi “s” *//* aguarda uma tecla e verifica se foi “s” */tecla = readkey() & 0xFF;tecla = readkey() & 0xFF;if (tecla == ‘S’ || tecla == ‘s’) exit(0);if (tecla == ‘S’ || tecla == ‘s’) exit(0);

Page 16: Biblioteca Allegro

Usando o Vídeo - BitmapsUsando o Vídeo - Bitmaps

Um bitmap nada mais é do que uma matriz de Um bitmap nada mais é do que uma matriz de pontos, em que cada valor indica uma cor.pontos, em que cada valor indica uma cor.

Esses valores podem indicar a cor em si ou Esses valores podem indicar a cor em si ou uma entrada numa outra matriz de cores (no uma entrada numa outra matriz de cores (no caso, por exemplo, dos modos em 8 bits).caso, por exemplo, dos modos em 8 bits).

O desenho no Allegro sempre é feito em O desenho no Allegro sempre é feito em bitmaps. O vídeo, inclusive, é considerado um bitmaps. O vídeo, inclusive, é considerado um (declarado como (declarado como BITMAP *screenBITMAP *screen););

Page 17: Biblioteca Allegro

Usando o Vídeo - Usando o Vídeo - PrimitivasPrimitivas A função A função clear_to_colorclear_to_color colore um bitmap colore um bitmap

completamente com a cor especificada.completamente com a cor especificada. A função A função putpixelputpixel desenha um ponto num desenha um ponto num

bitmap na posição e com a cor bitmap na posição e com a cor especificadas.especificadas.

Exemplos:Exemplos:clear_to_color(screen,4); /* cor 4, em geral, vermelho */clear_to_color(screen,4); /* cor 4, em geral, vermelho */putpixel(screen,234,123,0); /* cor 0, em geral, preto */putpixel(screen,234,123,0); /* cor 0, em geral, preto */

Outras primitivas: Outras primitivas: vlinevline, , hlinehline, , lineline, , triangletriangle, , rectrect, , rectfillrectfill, , circlecircle, , circlefillcirclefill..

Page 18: Biblioteca Allegro

Usando o Vídeo - TextoUsando o Vídeo - Texto Função Função text_modetext_mode indica qual cor vai ser indica qual cor vai ser

usada como fundo da fonte. Se o valor for usada como fundo da fonte. Se o valor for negativo, o fundo passa a ser transparente.negativo, o fundo passa a ser transparente.

Função Função textouttextout imprime uma string. Seus imprime uma string. Seus parâmetros são o bitmap destino, a fonte a parâmetros são o bitmap destino, a fonte a ser usada, a posição (x,y) e a cor da fonte.ser usada, a posição (x,y) e a cor da fonte.

Fonte padrão: Fonte padrão: fontefonte (declarada (declarada FONT *fontFONT *font).). Exemplo:Exemplo:text_mode(-1);text_mode(-1);textout(screen,font,”Testando texto...”,200,200,0);textout(screen,font,”Testando texto...”,200,200,0);

Page 19: Biblioteca Allegro

Usando o Vídeo - PaletaUsando o Vídeo - Paleta Paleta só se usa nos modos de cores de 8 Paleta só se usa nos modos de cores de 8

bits (256 cores).bits (256 cores). A paleta é uma matriz de 256 posições. Cada A paleta é uma matriz de 256 posições. Cada

posição representa uma cor. Cada posição posição representa uma cor. Cada posição possui 3 bytes, cada um indicando a possui 3 bytes, cada um indicando a quantidade de vermelho, verde e azul quantidade de vermelho, verde e azul daquela cor.daquela cor.

Cor x indica que a cor a ser usada é a que Cor x indica que a cor a ser usada é a que está na paleta na posição x.está na paleta na posição x.

Page 20: Biblioteca Allegro

Usando o Vídeo - ImagensUsando o Vídeo - Imagens

Formatos de imagem: PCX e BMP.Formatos de imagem: PCX e BMP. Antes de se mostrar uma imagem deve-Antes de se mostrar uma imagem deve-

se carregá-la da seguinte forma:se carregá-la da seguinte forma:/* declaração das variáveis que guardarão imagens *//* declaração das variáveis que guardarão imagens */BITMAP *img1,*img2; /* arquivos de BITMAP */BITMAP *img1,*img2; /* arquivos de BITMAP */PALETTE pal1,pal2; /* paletas */PALETTE pal1,pal2; /* paletas */

/* carrega os arquivos usando-se as respectivas funções /* carrega os arquivos usando-se as respectivas funções */*/img1 = load_pcx(“img.pcx”,pal1); /* para arquivos pcx img1 = load_pcx(“img.pcx”,pal1); /* para arquivos pcx */*/img2 = load_bmp(“img.bmp”,pal2); /* para arquivos bmp img2 = load_bmp(“img.bmp”,pal2); /* para arquivos bmp */*/

Ponteiro nulo -> arquivo não encontrado.Ponteiro nulo -> arquivo não encontrado.

Page 21: Biblioteca Allegro

Usando o Vídeo - ImagensUsando o Vídeo - Imagens Para usar a paleta lida do arquivo como a Para usar a paleta lida do arquivo como a

atual, basta usar a função atual, basta usar a função set_paletteset_palette, , passando a paleta lida como parâmetro.passando a paleta lida como parâmetro.

Depois de carregada, a imagem pode ser Depois de carregada, a imagem pode ser mostrada usando-se a função mostrada usando-se a função draw_spritedraw_sprite. . Seus parâmetros são: bitmap destino, Seus parâmetros são: bitmap destino, bitmap da imagem posição (x,y).bitmap da imagem posição (x,y).

BITMAP *img; PALETTE pal;BITMAP *img; PALETTE pal;img = load_pcx(“img.pcx”,pal);img = load_pcx(“img.pcx”,pal);set_palette(pal);set_palette(pal);draw_sprite(screen,img,100,100);draw_sprite(screen,img,100,100);

Page 22: Biblioteca Allegro

Usando o Vídeo - ImagensUsando o Vídeo - Imagens A função A função draw_spritedraw_sprite desenha usando a cor 0 desenha usando a cor 0

como transparente (no modo 8 bits) ou rosa claro como transparente (no modo 8 bits) ou rosa claro nos outros modos.nos outros modos.

A função A função blitblit é parecida com a é parecida com a draw_spritedraw_sprite, a , a diferença (prática) é que ela não usa cor de diferença (prática) é que ela não usa cor de transparência e, por isso, desenha a imagem transparência e, por isso, desenha a imagem carregada exatamente como ela é.carregada exatamente como ela é.

Parâmetros: imagem fonte, bitmap destino, Parâmetros: imagem fonte, bitmap destino, posição (x,y) da fonte, posição (x,y) do destino, posição (x,y) da fonte, posição (x,y) do destino, largura e altura.largura e altura.

Page 23: Biblioteca Allegro

Usando o Vídeo - Usando o Vídeo - AnimaçãoAnimação Usar toda hora o Usar toda hora o screenscreen traz problemas. traz problemas. Doubble Buffering (Buffer Duplo): Doubble Buffering (Buffer Duplo):

desenha-se sempre num buffer secundário desenha-se sempre num buffer secundário na memória. No fim de cada iteração da na memória. No fim de cada iteração da animação, copia-se tudo para a tela.animação, copia-se tudo para a tela.

Declarando, alocando e destruindo um Declarando, alocando e destruindo um buffer de bitmap num programa:buffer de bitmap num programa:

BITMAP *tela; /* declaração da variável */BITMAP *tela; /* declaração da variável */tela = create_bitmap(MAX_X,MAX_Y); /* alocando espaço */tela = create_bitmap(MAX_X,MAX_Y); /* alocando espaço */destroy_bitmap(tela); /* destruindo, no fim do programa */destroy_bitmap(tela); /* destruindo, no fim do programa */

Page 24: Biblioteca Allegro

Usando o MouseUsando o Mouse Usa-se a função Usa-se a função show_mouseshow_mouse para que o para que o

cursor do mouse seja mostrado no bitmap cursor do mouse seja mostrado no bitmap especificado. Passando especificado. Passando NULLNULL como como parâmetro esconde o cursor do mouse.parâmetro esconde o cursor do mouse.

Deve-se ter cuidado ao desenhar algo na Deve-se ter cuidado ao desenhar algo na tela pois o cursor do mouse pode passar por tela pois o cursor do mouse pode passar por cima e estragar o desenho, por isso é cima e estragar o desenho, por isso é sempre bom escondê-lo antes de desenhar sempre bom escondê-lo antes de desenhar qualquer coisa.qualquer coisa.

show_mouse(screen); /* mostra o mouse na tela */show_mouse(screen); /* mostra o mouse na tela */show_mouse(NULL); /* esconde o mouse */show_mouse(NULL); /* esconde o mouse */

Page 25: Biblioteca Allegro

Usando o MouseUsando o Mouse

As variáveis As variáveis mouse_xmouse_x e e mouse_ymouse_y contêm contêm a posição do cursor do mouse na tela.a posição do cursor do mouse na tela.

A variável A variável mouse_bmouse_b contém o estado dos contém o estado dos botões. botões.

(mouse_b & 1)(mouse_b & 1) é verdadeiro se o botão é verdadeiro se o botão esquerdo estiver pressionado.esquerdo estiver pressionado.

(mouse_b & 2)(mouse_b & 2) é verdadeiro se o botão é verdadeiro se o botão direito estiver pressionado.direito estiver pressionado.

Page 26: Biblioteca Allegro

Tópicos Adicionais & Tópicos Adicionais & AvançadosAvançados

Outras funções sobre os Outras funções sobre os tópicos abordados.tópicos abordados.

Timers (temporizadores).Timers (temporizadores). Data Files (arquivos de Data Files (arquivos de

dados).dados). Joystick.Joystick. Arquivos de configuração.Arquivos de configuração. Funções Gráficas 3D.Funções Gráficas 3D.

Page 27: Biblioteca Allegro

Como Obter Mais AjudaComo Obter Mais Ajuda

Arquivos de documentação do Allegro, Arquivos de documentação do Allegro, principalmente principalmente faq.txtfaq.txt e e allegro.txtallegro.txt..

Links na própria página do Allegro.Links na própria página do Allegro. Demo do Allegro (\allegro\demo).Demo do Allegro (\allegro\demo). Exemplos do Allegro (\allegro\examples).Exemplos do Allegro (\allegro\examples). Newsgroups e listas de discussão.Newsgroups e listas de discussão. Vários programas já desenvolvidos usando Vários programas já desenvolvidos usando

o Allegro fornecidos com o código fonte.o Allegro fornecidos com o código fonte.