A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)

Apresentações semelhantes


Apresentação em tema: "Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)"— Transcrição da apresentação:

1 Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)

2 A Biblioteca Allegro Biblioteca para construção de jogos e aplicações multimídia em geral Free Source Voltada mais especialmente para jogos 2D Conhecida pela facilidade de adicionar entrada de dados via teclado, mouse e joystick Grande comunidade de desenvolvedores

3 Características Multi-plataforma DOS Windows Linux Mac (OS X) BeOS QNX Primitivas Gráficas Rectas, círculos, elipses Polígonos (sólidos, texturados, transparentes) Texto em modo gráfico Animações

4 Características (cont.) Gere mouse, teclado, joystick Suporta arquivos de configuração e de dados comprimidos Temporizadores

5 Usando Allegro Incluir depois de todos os demais includes Deve sempre aparecer uma chamada à função allegro_init() o mais perto possível do início do programa. Da mesma forma devem ser chamadas, a seguir, as funções install_keyboard(), install_mouse() e install_timer(). Nota: as funções normais do C para teclado não irão mais funcionar.

6 Usando Allegro A função allegro_exit() deve ser chamada no final do programa. Colocar a macro END_OF_MAIN() logo após a chave final da rotina main() Ao compilar, incluir a biblioteca alleg: gcc -o test test.c –lalleg

7 Especificar Modo Gráfico Especificado antes de começar a desenhar: int set_gfx_mode (int card, int w, int h, int v_w, int v_h); Onde: card é usualmente GFX_AUTODETECT, GFX_AUTODETECT_FULLSCREEN ou GFX_AUTODETECT_WINDOWED w, h largura e altura v_w, v_h largura e altura virtual (normalmente, 0)

8 Bitmaps são matrizes de pixels, em que cada valor indica uma cor Desenho se dá sobre estruturas chamadas BITMAPs Tela é um BITMAP especial chamado screen BITMAPs adicionais podem ser criados com: BITMAP *bmp = create_bitmap(int width, int height); Chamado antes de set_gfx_mode Desenhar Objectos – BITMAPs

9 Os vectores X e Y, estão posicionados da maneira diferente quando comparamos os planos, desta forma, quando desenharmos a linha, devemos ter em mente a direcção do traço.

10 Alguns exemplos de rotinas gráficas simples: void putpixel (BITMAP *bmp, int x, int y, int color); void vline(BITMAP *bmp, int x, int y1, int y2, int color); void hline(BITMAP *bmp, int x1, int y, int x2, int color); void line(BITMAP *bmp, int x1, int y1, int x2, int y2, int color); void triangle(BITMAP *bmp, int x1, y1, x2, y2, x3, y3, int color); void rect(BITMAP *bmp, int x1, int y1, int x2, int y2, int color); void rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color); void circle(BITMAP *bmp, int x, int y, int radius, int color); Desenhar Objectos – BITMAPs

11 Cores Modelo depende do modo gráfico sendo o default 8 (256 cores). Cada cor é expressa com três números, cada um numa escala de 0 a 63 (intensidade) Para armazenar cores no Allegro: typedef struct RGB { unsigned char r, g, b; } RGB;

12 Cores A cor azul é formada através da RGB [0,0,255]

13 Animação Dar a impressão de que coisas se movem Pode significar mover um pixel ao longo da tela mas, geralmente, significa uma mudança repetitiva da apresentação de algo para que dê a ideia de que se move. Qual a técnica mais simples? limpamos a tela, desenhamos os objectos, limpamos a tela novamente, desenhamos os objectos nas novas posições

14 Animação Qual o problema desta técnica? Efeito Flicker - efeito de cintilação ou vibração de uma imagem na tela do computador Instante 1Instante 2: Limpar a tela Instante 3

15 Animação Qual a solução? Double Buffering Instante 2: Limpar a tela Instante 1 Instante 3 Buffer Instante 1 Instante 3 Tela Instante 2

16 Periféricos de Entrada - Teclado Teclado install_keyboard() /* Para inicializar as rotinas do teclado */ TeclaCódigo na Array A, B... ZKEY_A, KEY_B...KEY_Z Teclado Numérico 0 a 9KEY_0_PAD... KEY_9_PAD Teclado Normal 0 a 9KEY_0... KEY_9 EscKEY_ESC EnterKEY_ENTER Seta para a DireitaKEY_RIGHT Seta para a EsquerdaKEY_LEFT Seta para CimaKEY_UP Seta para BaixoKEY_DOWN PauseKEY_PAUSE Barra de EspaçoKEY_SPACE Print ScreenKEY_PRTSCR Shitf EsquerdoKEY_LSHIFT Shift DireitoKEY_RSHIFT Control EsquerdoKEY_LCONTROL Control DireitoKEY_RCONTROL Alt esquerdoKEY_ALT Alt DireitoKEY_ALTGR Váriável global int key[] permite ver quais teclas estão pressionadas. constantes definidas para identificar cada tecla

17 Mover coisas na tela: void processa_teclado(int* x, int* y) { if (key[KEY_UP]) { *y = *y - 1; } else if (key[KEY_DOWN]){ *y = *y + 1; } else if (key[KEY_RIGHT]){ *x = *x + 1; } else if (key[KEY_LEFT]){ *x = *x - 1; } Periféricos de Entrada - Teclado

18 install_mouse() /* Para inicializar as rotinas do mouse */ Retorna -1 em caso de falha ou o número de botões que o mouse tem em caso de sucesso Periféricos de Entrada - Mouse Usa-se a função show_mouse para que o cursor do mouse seja mostrado no bitmap especificado Usa-se a função show_mouse para que o cursor do mouse seja mostrado no bitmap especificado Passando NULL como parâmetro esconde o cursor do mouse Passando NULL como parâmetro esconde o cursor do mouse Deve-se ter cuidado ao desenhar algo na tela pois o cursor do mouse pode passar por cima e estragar o desenho, por isso é sempre bom escondê-lo antes de desenhar qualquer coisa Deve-se ter cuidado ao desenhar algo na tela pois o cursor do mouse pode passar por cima e estragar o desenho, por isso é sempre bom escondê-lo antes de desenhar qualquer coisa show_mouse(screen); /* mostra o mouse na tela */ show_mouse(NULL); /* esconde o mouse */

19 As variáveis mouse_x e mouse_y contêm a posição do cursor do mouse na tela. A variável mouse_b contém o estado dos botões. (mouse_b & 1) é verdadeiro se o botão esquerdo estiver pressionado. (mouse_b & 2) é verdadeiro se o botão direito estiver pressionado. Periféricos de Entrada - Mouse

20 Som Som digital: WAV. Música: MID. Antes de se tocar um som digital ou música deve-se carregá-los da seguinte forma: /* declaração das variáveis que guardarão sons e músicas */ SAMPLE *som1; /* SAMPLE = arquivos de som digital */ MIDI *musica; /* MIDI = arquivos de música */ /* carrega os arquivos usando-se as respectivas funções */ som1 = load_wav(arquivo.wav); /* para arquivos wav */ musica = load_midi(arquivo.mid); /* para arquivos mid */ Ponteiro nulo -> arquivo não encontrado.

21 Som – MIDIs Para tocar uma música usa-se a função play_midi. O primeiro parâmetro é o arquivo MIDI carregado, o segundo indica se ele tocará em loop ou não. /* Exemplo para tocar um arquivo MIDI */ MIDI *musica; /* declaração da variável a ser usada */ musica = load_midi(musica.mid); /* carrega arquivo */ play_midi(musica,TRUE); /* toca a música em loop */ Para parar de tocar uma música usa-se a função stop_midi().

22 Som - Samples Para tocar um som digital usa-se a função play_sample. Os cinco parâmetros indicam: arquivo carregado, volume (0 a 255), equilíbrio entre as caixas (0 a 255, 128 é meio a meio), freqüência (1000 usa a frequência original, 500 usa a metade da freqüência original etc.) e se vai ser tocado em loop Função stop_sample() pára de tocar /* Exemplo para tocar um arquivo de som WAV */ SAMPLE *som; /* declaração da variável a ser usada */ som = load_wav(som.wav); /* carrega arquivo */ play_sample(som,255,128,1000,FALSE); /* toca som */

23 Timming no Allegro Executar pedaço de código em velocidades diferentes Para isso, colocar cada um dos trechos de código numa função diferente Allegro só permite o uso de 16 timers int install_int(void (*proc)(), int speed) /* cria timer */ install_timer(); /*inicializa timer, opcional */ void remove_int(void (*proc)()) /* remove função da lista */

24 Timming no Allegro Notas: Todas variáveis globais acessadas nos timers devem ser trancadas com a macro LOCK_VARIABLE() Todas as funções de "timer" devem ser trancadas com LOCK_FUNCTION() speed representa milésimos de segundo

25 Timming no Allegro Exemplo: volatile int x=0; //Variável glogal modificada em um timer void Anda(void) { //Timer x++;} END_OF FUNCTION(Anda); //Necessário após a declaração de um timer int main(void) { //Nosso programa... install_timer(); //Opcional, porém mais legível LOCK_FUNCTION(Anda); //Obrigatório trancar os timers usados LOCK_VARIABLE(x); //Obrigatório trancar as variáveis globais dos timers install_int(Anda, BPS_TO_TIMER(10)); //"Anda" executado 10 vezes por segundos while(!Fim_Jogo) {} //Lógica do jogo return(1); }

26 Exemplo de Jogos Swear

27 Exemplo de Jogos Icy Tower

28 Como Obter Mais Ajuda Arquivos de documentação do Allegro, principalmente faq.txt e allegro.txt. Links na própria página do Allegro. Demo do Allegro (\allegro\demo). Exemplos do Allegro (\allegro\examples). Newsgroups e listas de discussão. Vários programas já desenvolvidos usando o Allegro fornecidos com o código fonte.

29 Instalando Allegro Devc++ Clique no botão Install e selecione o caminho onde você salvou o pacote de instalação do Allegro:

30 Usando Allegro no Devc++ Crie um Novo Projeto no DevC++, Selecione a aba MultiMedia, e clique em Allegro Application(static):

31 Bibliografia Site principal do Allegro Site principal de aplicações (games) em allegro Tutorial allegro vivace

32 Exercício Ex1: Construa um Círculo Trigonométrico a partir das primitivas (reta, retângulo, círculo) do Allegro. Ex2: Faça o joginho de Surf, para tal, utiliza as imagens surf.bmp e teahupoo.bmp


Carregar ppt "Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)"

Apresentações semelhantes


Anúncios Google