Académique Documents
Professionnel Documents
Culture Documents
Paulo V. W. Radtke
pvwradtke@gmail.com http://www.ppgia.pucpr.br/~radtke/jogos/
AVISO IMPORTANTE!!
Esta verso dedicada exclusivamente para os cursos de Cincia da Computao e Engenharia da Computao. Para a verso de Sistemas de Informao, utilizando Java, pegue o arquivo correspondente e participe da aula no horrio adequado.
PUCPR - CCET 2
Contedo
Instalando as bibliotecas SDL no DevC++. Introduo biblioteca Chien2dLite. Ciclo de vida bsico de um programa. Primeiro exemplo: carregando uma tela usando SDL. Carregando sprites e mostrando-os na tela.
PUCPR - CCET 3
SDL
SDL: biblioteca ncleo. Fornece funcionalidades bsicas. SDL_Image: biblioteca para a manipulao de imagens 2D. SDL_Mixer: biblioteca que extende o suporte de udio da SDL. Suporta vrios formatos de msicas, como MIDI, MP3, Ogg, tracked e diversos de udio.
PUCPR - CCET 4
SDL
Para facilitar a instalao, foi criado um pacote, disponibilizado na pgina da tutoria: pacote-dev-cpp.zip. Este arquivo deve ser descompactado no diretrio aonde se encontra instalado o DevC++. Ex: Se ele se encontra instalado em C:\DevCpp, o mesmo deve ser descompactado em C:\, a raiz do drive.
PUCPR - CCET 5
SDL
Alm disto, possvel fazer o download dos pacotes diretamente do site da SDL: http://www.libsdl.org Como toda biblioteca compartilhada, a DLL possui um grupo de arquivos que devem ser colocados no diretrio System do Windows ou distribudos junto com a aplicao.
PUCPR - CCET 6
SDL
Como no temos permisso de escrita no diretrio System, utilizaremos a segunda opo. Apesar de aparentemente mais desvantajosa, esta abordagem mais prtica do ponto de vista de distribuio.
PUCPR - CCET 7
SDL
Chien2DLite
Biblioteca bsica 2D para sprites e fontes bitmap. Se preocupa com o gerenciamento das primitivas escolhidas Baseada em uma classe (C++). A classe um singleton, e a instncia do vdeo pode ser acessada a partir de qualquer ponto do programa.
PUCPR - CCET 9
Chien2DLite
Limitaes:
Adaptada a partir de uma verso OpenGL, a biblioteca somente carrega imagens quadradas, com tamanhos potncia de 2. Ex: 8x8, 16x16, 32x32, 64x64, 128x128, 256x256, 512x512, 1024x1024, etc. A biblioteca somente desenha blocos (azulejos, do ingls tiles), no dando suporte a imagens.
PUCPR - CCET 10
Chien2DLite
A primeira verso bsica no possui primitivas 2D tradicionais. Ser implementado para as prximas aulas o suporte a desenho de pontos, retas e retngulos.
PUCPR - CCET
11
Projeto no Dev-C++
Para fazermos qualquer coisa com a biblioteca, devemos criar um projeto no DevC++. O primeiro passo criar um diretrio e extrair nele os arquivos da Chien2DLite. O arquivo exemplo01-c-imagem.zip ser utilizado neste exemplo (o arquivo contm a biblioteca Chien2DLite).
PUCPR - CCET 12
Projeto no Dev-C++
PUCPR - CCET
13
Projeto no Dev-C++
O projeto por default vem com um arquivo main.cpp, remova-o. Para isto, pressione o boto direito do mouse sobre o nome do arquivo e selecione a opo Remove File.
PUCPR - CCET
14
Projeto no Dev-C++
Em seguida, adicione os arquivos do exemplo clicando com o boto direito do mouse no nome do projeto:
PUCPR - CCET
15
Projeto no Dev-C++
Obs: os arquivos da Chien2DMappy, responsvel pelos mapas esto inclusos mas no sero utilizados neste exemplo. A sua incluso no projeto no faz diferena.
PUCPR - CCET 16
Projeto no Dev-C++
Se compilarmos o projeto como est, o mesmo no funcionar. preciso indicar ao compilador quais bibliotecas ligar ao executvel com o linker em Project -> Project Options.
PUCPR - CCET
17
Projeto no Dev-C++
PUCPR - CCET
18
Projeto no Dev-C++
PUCPR - CCET
19
Projeto no Dev-C++
Uma vez colocados os parmetros, o programa compilar e o executvel ser gerado. Ao executar o mesmo funciona. S que por enquanto, o programa s exibe uma tela preta. Para encerrar o programa, pressione ESC ou feche a janela.
PUCPR - CCET 20
Vamos nos concentrar na funo main, ignorando (por enquanto), a funo entrada, responsvel pelo polling do teclado. A funcionalidade bsica da biblioteca simples, apenas 6 funes resolvem a parte de inicializao, encerramento e redesenho de tela.
PUCPR - CCET 21
Aqui criamos uma referncia ao objeto da Chien2DLite (um ponteiro). O objeto deve ser recuperado SEMPRE atravs deste mtodo esttico. Este mtodo acessvel de qualquer ponto do programa.
PUCPR - CCET 22
Este mtodo cria a janela em si. Os 5 parmetros so descritos a seguir, na assinatura do mtodo.
PUCPR - CCET
23
Largura e altura indicam a resoluo horizontal e vertical da tela. Em modo janela, podem ser qualquer valor. Em tela cheia, deve ser uma resoluo suportada pelo monitor. Garantido em Windows: 640x480 e 800x600.
PUCPR - CCET 24
Modo indica se a tela vai ser em modo janela ou tela cheia. Valores possveis (valores constantes em Chien2DLite.h):
Chien2DLite::janela Chien2DLite::telaCheia
PUCPR - CCET 25
Valor booleano indicando se a aplicao deve ou no esperar o retrao. Em modo janela ele ignorado, j em tela cheia ele implementado em conjunto com double buffer. Valores possveis: true e false.
PUCPR - CCET 26
String indicando o nome da aplicao. Qualquer valor string vlido (entre aspas) aceito.
PUCPR - CCET
27
O mtodo limpaTela, como o nome sugere, limpa a tela com a cor preta. til entre redesenho de frames nos jogos.
PUCPR - CCET
28
PUCPR - CCET
29
A funo encerra fecha a janela e remove os recursos alocados PELA Chien2DLite. Recursos alocados com funes SDL devem ser removidos manualmente.
PUCPR - CCET 30
Finalmente, a funo removeInstancia remove a instancia da classe da memria. Como boa prtica de pogramao, interessante chamar essa funo no final dos seus programas.
PUCPR - CCET 31
Imagens na SDL so do tipo SDL_Surface. Este tipo uma estrutura que alocada quando a imagem criada/alocada. Para usarmos uma imagem do disco, devemos criar um ponteiro para uma surface:
SDL_Surface *imagem;
PUCPR - CCET
32
Para carregar imagens de diversos formatos do disco, devemos utilizar a SDL image. O include desta biblioteca o SDL_image.h. Ele j importado atravs do chien2dlite.h. Normalmente, aplicaes SDL devem incluir este arquivo.
PUCPR - CCET 33
PUCPR - CCET 34
Ao carregar a imagem pode ocorrer um erro. Caso a imagem no exista ou no haja mais espao em memria, a surface retornada nula (NULL, 0). Em geral, interessante testar esta condio para no usar um ponteiro nulo.
PUCPR - CCET 35
Normalmente, surfaces criadas de diferentes fontes no tem o mesmo formato que o display de vdeo. Para acelerar o processo de redesenho, devemos converter as imagens para o formato do display. Pesquise na documentao da SDL como fazer isto.
PUCPR - CCET
36
Desenhando a Imagem
Para desenharmos diretamente na tela enquanto usamos a Chien2DLite, precisamos pegar a surface do display do sistema. Para isto, usamos a funo: SDL_GetVideoSurface(); A funo retorna o ponteiro da surface associada ao display do sistema.
PUCPR - CCET 37
Desenhando a Imagem
Uso tpico:
PUCPR - CCET
38
Desenhando a Imagem
Uma vez com a imagem e o display de vdeo, utilizamos a funo SDL_BlitSurface. A funo copia parte de uma surface para outra. uma cpia rpida de pontos.
PUCPR - CCET
39
Desenhando a Imagem
Uso tpico: SDL_BlitSurface(imagem, 0, display, 0); Copia a surface imagem (inteira) para a surface display (inteira), a partir das coordenadas (0,0).
PUCPR - CCET 40
Desenhando a Imagem
A funo SDL_BlitSurface serve para outras situaes. Podemos inclusive copiar um pedao da surface de origem em um pedao da surface de destino. Caso voc tenha maior interesse nesta funo, consulte a documentao da SDL (online ou faa o download).
PUCPR - CCET 41
Eliminando a Imagem
Uma surface criada na SDL ocupa memria alocada dinamicamente. Esta memria DEVE ser liberada quando ela no for mais ser utilizada. Assim, antes de encerrar o programa, devemos eliminar a imagem:
SDL_FreeSurface(imagem);
PUCPR - CCET 42
Exerccio 1
2. 3. 4.
Carregar uma imagem do disco (imagem640480.png). Recuperar o display do vdeo. Durante o redesenho, faa o blit da tela. Antes de encerrar o programa, libere a memria associada a imagem.
Salve os arquivos em disco para a prxima aula (pode apagar o executvel e os .o).
PUCPR - CCET 43
Agora vamos discutir como carregar sprites e blocos de mapa, chamados de Azulejos na Chien2DLite. Para isto, utilizamos o seguinte mtodo:
PUCPR - CCET
45
PUCPR - CCET
46
unsigned int carregaAzulejo(string arquivo, string apelido, int tipoAzulejo); O inteiro retornado o identicador nico do azulejo no sistema, diferente de zero. Se retornar zero, falhou o carregamento.
PUCPR - CCET 48
2.
3.
A imagem no existe no caminho indicado. No h mais memria no sistema para a imagem. A imagem no quadrada com tamanho potncia de 2. Este ser o erro mais provvel inicialmente.
PUCPR - CCET 49
Carregando Sprites
Uso tpico:
PUCPR - CCET
50
Mostrando o Sprite
O azulejo um tile set, ou seja, ele pode conter vrios blocos dentro dele. Para desenharmos um sprite precisamos do identificado do sprite, o ndice dentro do tile set e da posio x e y:
bool desenhaAzulejo(unsigned int identificador, unsigned int indice, int x, int y);
PUCPR - CCET 51
Mostrando o Sprite
Uso tpico:
video->desenhaAzulejo(sprite, 0, 30,224);
PUCPR - CCET
52
Eliminando o Sprite
Em um jogo com muitas fases, po carregamento de recursos a cada fase inevitvel. Nestes casos, preciso eliminar azulejos que no sero mais utilizados:
Exerccio 2
3.
Carregue o sprite no arquivo sprite.png. Mostre-o na tela SOBRE a imagem carregada. Elimine o sprite antes de encerrar o modo de vdeo.
Obs1: a seqncia no redesenho importa. O que desenhado por ltimo desenhado em cima. Obs2: guarde os arquivos para a prxima aula.
PUCPR - CCET 54
Desafio
Modifique o programa para desenhar mais de um sprite na tela. Depois, experimente fazer um sprite atravessar a tela. Para ficar mais interessante, faa o sprite ir e vir de um canto a outro da tela.
PUCPR - CCET 55
Prxima Aula
PUCPR - CCET
56