PUCRS/FACIN
Curso de Especiali
zaçã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.