PUCRS/FACIN
Curso
de Especialização
em Desenvolvimento de Jogos
Digitais
Computação
Gráfica 2D
Profs.
Márcio Sarroglia Pinho
Isabel Harb Manssour
Layers
O objetivo desta aula é utilizar Layers.
Utilize o Framework atualizado.
Os Layers são usados para simular profundidade entre elementos de um jogo.
Coloque o arquivo CBasico-Layer.cpp em seu projeto.
Criando Layers
Inicialmente declare duas variáveis da classe CLayer. Uma que irá armazenar o cenário e outra a sprite.
CLayer *layerCao= NULL;
CLayer *layerFundo = NULL;
A seguir, monte os dois layers, através do método add da classe CLayer. Este método recebe objetos da classe CImage, e de suas derivadas ou seja: CSprite, CMultImage, CTilesMap.
void MontaLayer() {
cout << "Monta Layer....";
layerCao = new CLayer();
layerCao->add(spriteCao);
cout << "Sprite CAO adicionado no Layer." << endl;
layerFundo = new CLayer();
layerFundo->add(ImgFundo);
cout << "Imagem de fundo adicionada no Layer." << endl;
}
Adicione a chamada da função que cria os Layers logo após a criação das
Sprites, no programa principal, conforme o exemplo abaixo.
CarregaImagem();
CarregaSprite();
MontaLayer();
Exibindo Layers
Para exibit um Layer, utiliza-se o método
Draw, tomando o cuidado de desenhar antes aquilo que fica atrás no
cenário.
Adicione as chamadas abaixo logo antes da função SDL_GL_SwapBuffers, na função Desenha.
layerFundo->draw();
layerCao->draw();
Classe LayerHandler
A partir do arquivo GameBasico-CLayerHandler.cpp, observe o funcionamento do gerenciador de layers de nosso framework.
Analise com cuidado a função MontaLayer. Veja o médodo add, permite associar um objeto CImage ou CSprite a um layer, informando sua profundidade, no segundo parâmetro.
void MontaLayer() {
cout << "Monta Layers....";
layers = new CLayerHandler(5);
layers->add(spriteCao,1); // Coloca a sprite no layer 1
cout << "Sprite CAO adicionado no Layer." << endl;
layers->add(Img1,0); // Coloca a imagem no layer 0
cout << "Imagem de fundo adicionada no Layer." << endl;
}
Na função Desenha, a exibição dos layers é feita pela comando
layers->draw();
Mova a sprite com a tecla de seta para a direita e veja o resultado, quando este atinge a mesma posição de imagem.
Altere, na função Desenha, as chamadas do método add, conforme o exemplo abaixo e veja o resultado.
layers->add(spriteCao,0); // Coloca a sprite no layer 0
cout << "Sprite CAO adicionado no Layer." << endl;
layers->add(Img1,1); // Coloca a imagem no layer 1
cout << "Imagem de fundo adicionada no Layer." << endl;
FIM.