Você está na página 1de 33

Programao Grfica Parte 3

Verso em C 2006 PUCPR Tutoria de Jogos 1 Ano

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

Entrega da 2 Parcial
Datas importantes:
12 a 17 de Junho. Relatrio impresso contendo:
Cdigo fonte do prottipo da interface. Impresso no relatrio dos recursos grficos da fase/jogo (tilemaps, sprites, cenrios de fundos, prottipo, etc). Discusso do uso dos recursos com a lgica do jogo no terceiro bimestre.

Defesa em laboratrio do prottipo e entrega do relatrio com a equipe completa.


PUCPR - CCET 3

Entrega da 2 Parcial
Por recursos grficos,entende-se que neste bimestre j teremos:
1.

2. 3.

TODOS os sprites necessrios para o demo. TODAS as telas de fundo/tilemaps. TODAS as fontes.

Logo, espera-se que o relatrio inclua TODOS estes elementos.


PUCPR - CCET 4

Contedo
Coliso de Sprites Desenhando um Tilemap Movimentando um Tilemap

PUCPR - CCET

Coliso de Sprites
A coliso de sprites ocorre quando dois sprites sobrepe a sua rea desenhada. Por rea desenhada, entende-se os pontos opacos do sprite. A deteco trabalha em conjunto com a lgica do jogo, no devendo ser tratada como algo automtico.
PUCPR - CCET 6

Coliso de Sprites
Logo, o seu jogo ir decidir se ele testa a coliso e de quais sprites se testar a coliso. A Chien2DLite possui um mtodo especfico para testar se dois sprites colidiram. Est mtodo o colidiuAzulejos.
PUCPR - CCET 7

Coliso de Sprites
O mtodo testa a coliso ponto-a-ponto dos sprites. Esta deteco acelerada por uma mscara de bits. Alm disso, a coliso testada apenas com sprites 32x32. Outros tamanhos no so suportados.
PUCPR - CCET 8

Coliso de Sprites
bool colidiuAzulejos(int identificador1, int indice1, int x1, int y1, int identificador2, int indice2, int x2, int y2):
identificador: identificador dos sprites no sistema de vdeo. indice: qual bloco dentro do azulejo ser testado. x e y: coordenadas dos sprites na tela.
PUCPR - CCET 9

Coliso de Sprites
Uso tpico:

if(video->colidiuAzulejos(sprite1, 0, x1, y1, sprite2, 3, 200,300)) { // Cdigo para tratar a coliso ...
PUCPR - CCET 10

Coliso de Sprites
O mais importante lembrar:
Este mtodo testa a coliso de elementos 32x32. Logo, um jogo real testaria se a arma do personagem tocou um inimigo, usando este mtodo. Nem todos os jogos precisam testar a coliso de sprites.

PUCPR - CCET

11

Exerccio 01
NO exerccio anterior, tnhamos desenhado na tela um sprite fixo, alm de um sprite controlado pelo teclado. Teste a coliso nestes dois sprites. Caso ocorra a coliso na tela, desenhe um texto indicando isto.

PUCPR - CCET

12

Desenhando um Tilemap
Para desenharmos um tilemap utilizamos a biblioteca Chien2DMappy. Esta biblioteca utiliza a Chien2DLite para desenhar um mapa gerado pelo Mappy na tela. Por tela, entende-se aqui a tela TODA.
PUCPR - CCET 13

Desenhando um Tilemap
Para isto, precisamos de 2 coisas:
1. 2.

Arquivo com os blocos da imagem. Arquivo com o mapa gerado pelo Mappy, em um dos formatos:
Formato FMP. Formato FMA.

PUCPR - CCET

14

Desenhando um Tilemap
O formato FMP mais completo e inclui os grficos. Porm, por falta de flexibilidade, este formato muito recomendado para a Chien2DMappy. O formato FMA possui apenas os dados do tilemap, sem a imagem, gerando um arquivo menor.
PUCPR - CCET 15

Desenhando um Tilemap
Para gerar o arquivo FMA, basta abrir o mapa e escolher a opo MapTools, Useful functions, Save FMP without graphics (FMA). A vantagem de separar o grfico do tilemap no FMA de reutilizar o mesmo tileset em diversos tilemaps.
PUCPR - CCET 16

Desenhando um Tilemap

PUCPR - CCET

17

Desenhando um Tilemap
Dica: durante o desenvolvimento, utilize o arquivo FMP, j que ser comum voc fazer mudanas frequentes no mapa. Apenas para a ditribuio voc gera o FMA a partir do FMP. Nota: voc DEVE guardar o FMP original para referncia.
PUCPR - CCET 18

Desenhando um Tilemap
Para este exemplo, utilizaremos o arquivo caula07-plataforma.zip. O arquivo contm o tilemap (plataforma.FMP e plataforma.FMA) e o tileset (plataforma.png). Extraia o arquivo no diretrio do projeto. Sobrescreva os arquivos chien2dmappy.h e chien2dmappy.cpp, estas verses no arquivo so novas e possuem duas correes importantes.
PUCPR - CCET 19

Desenhando um Tilemap
O primeiro passo para se carregar um tilemap carregar o seu tileset. Na Chien2DLite, o tileset caregado como sprites (um conjunto de azulejos).
unsigned int tileset = video->carregaAzulejo( "plataforma.png", "Tileset do cenario", Chien2DLite::azulejo32);
PUCPR - CCET 20

Desenhando um Tilemap
Em seguida, criamos um objeto da classe Chien2DMappy:

Chien2DMappy *mapa = new Chien2DMappy();


Eventualmente, quando este objeto no for mais necessrio, devemos elimin-lo explicitamente:

delete mapa;
PUCPR - CCET 21

Desenhando um Tilemap
Para carregar o mapa, utilizamos o mtodo:

bool carregaMapa(string arquivo);


O mtodo recebe o nome do arquivo FMP/FMA a carregar. Ele retorna true ou false se conseguiu ou no carregar o mapa.
PUCPR - CCET 22

Desenhando um Tilemap
Exemplo de uso do carregaMapa:

mapa->carregaMapa("plataforma.FMA");

PUCPR - CCET

23

Desenhando um Tilemap
Para desenhar o tilemap, utilizamos a funo:

void desenhaCamadaMapa(unsigned int idAzulejo, int camada, int x, int y);


Esta funo desenha uma camada do mapa na tela, utilizando um tileset indicado por idAzulejo nas coordenadas x e y (internas do mapa).
PUCPR - CCET 24

Desenhando um Tilemap
Exemplo de uso tpico:

mapa->desenhaCamadaMapa(tileset, 0, 0, 0);

PUCPR - CCET

25

Desenhando um Tilemap
Se um mapa possuir vrias camadas, devemos desenh-las uma a uma para gerar a imagem final. A Chien2DMappy no faz isso automaticamente para permitir efeitos especiais dependentes do jogo:
Scroll em parallax (camadas). Cenrios em planos superiores ao (como em RPGs). Uso de camadas do mapa para controlar os eventos do jogo (triggers).
PUCPR - CCET

26

Exerccio 02
Modifique o exerccio anterior para carregar o mapa plataforma.FMA e o seu tileset, plataforma.png. Ao invs de desenhar a tela de fundo, desenhe o tilemap na coordenada 0,0.

PUCPR - CCET

27

Movimentando um Tilemap
O mtodo desenhaCamada pode desenhar outras coordenadas dentro do mapa. Porm, este somente desenha coordenadas vlidas, isto , coordenadas em que o mapa no cubra a tela toda no so desenhadas.
PUCPR - CCET 28

Movimentando um Tilemap
Para determinar as dimenses de um mapa para animar a movimentao do cenrio, utilizamos o mtodo:

bool dimensoesMapa(int *largura, int *altura, int *dimensaoAzulejo, int *camadas);

PUCPR - CCET

29

Movimentando um Tilemap
O mtodo retorna true ou false se ele pde determinar as dimenses do mapa (isto , se o mapa foi ou no carregado). AS dimenses do mapa so retornadas por ponteiros. Os valores da altura e largura indicam quantos blocos o mapa tem nessa dimenso. dimensaoAzulejo indica, em pixels, o tamanho do bloco que desenha o cenrio. camadas indica o nmero de camadas geradas pelo Mappy.
PUCPR - CCET 30

Movimentando um Tilemap
Uso tpico: // Determina as dimenses do mapa int largura, altura; int tamBloco, camadas; mapa->dimensoesMapa(&largura, &altura, &tamBloco, &camadas);
PUCPR - CCET 31

Movimentando um Tilemap
O tamanho do mapa em pixels determinado pela largura dele em blocos e o tamanho do bloco de cenrio. Sabendo estes valores, podemos utilizlo para movimentar a tela dentro do mapa.
PUCPR - CCET 32

Desafio
Modifique o exerccio anterior para determinar as dimenses do mapa. Utilize estes valores para movimentar o mapa na horizontal automaticamente.

PUCPR - CCET

33

Você também pode gostar