Pular para o conteúdo
Baixar

Camadas e tiles

As camadas são as do painel Camadas da room. No código, uma camada é sempre indicada pelo nome, entre aspas.

Função O que faz Exemplo
T* spawn<T>(float atX, float atY, std::string_view layer) Cria uma instância de T na camada layer. Devolve nullptr (com erro na Saída) se a camada não existe ou não é de Instâncias. spawn<Bullet>(x, y - 8, "Tiros");
T* spawnAtDepth<T>(float atX, float atY, int atDepth) Cria uma instância fora das camadas, num depth escolhido. spawnAtDepth<Faisca>(x, y, -50);
void setLayer(std::string_view layer) Muda esta instância para outra camada de Instâncias. setLayer("Frente");
const std::string& layerName() O nome da camada desta instância ("" se ela está fora das camadas). if (layerName() == "Fundo") ...
Função O que faz Exemplo
void setLayerVisible(std::string_view layer, bool show) Mostra ou esconde uma camada. setLayerVisible("Segredo", true);
bool layerVisible(std::string_view layer) true se a camada está visível. if (layerVisible("Segredo")) ...
void setLayerPosition(std::string_view layer, float x, float y) Põe o canto de uma camada de Fundo em (x, y) da room. setLayerPosition("Montanhas", scene().camera.x * 0.5f, 40);
float layerX(std::string_view layer) e layerY A posição atual da camada. float px = layerX("Montanhas");
Função O que faz Exemplo
int tileAt(std::string_view layer, float atX, float atY) O número do tile que está naquele ponto da camada de Tiles (o primeiro do tileset é o 0), ou -1 se não há tile. if (tileAt("Chao", x, y + 12) == 7) ...
bool solidAt(float atX, float atY) true se há algo sólido naquele ponto: um tile sólido ou uma instância com solid. if (solidAt(x + 10, y)) flipX = !flipX;
  • O depth de uma instância vem da camada em que ela está. depth ainda pode ser lido e mudado no código, mas setLayer é o jeito mais claro de mudar a ordem de desenho.
  • Esconder uma camada de Instâncias só deixa de desenhá-las: elas continuam rodando e colidindo.
  • Uma camada de Tiles escondida continua barrando o movimento. Para ela deixar de colidir, desligue Colide no editor.
  • Os tiles sólidos entram sozinhos em placeFree, moveAndStop, onGround, hitFloor, hitWall e hitCeiling. Veja Colisão e Movimento.
  • Os tiles não mudam com o jogo rodando nesta versão.

Para um menu de opções de vídeo. O que está em Configurações do projeto é só o valor inicial.

Função O que faz Exemplo
void Window::setFullscreen(bool on) Entra na tela cheia ou volta para a janela. Window::setFullscreen(!Window::fullscreen());
bool Window::fullscreen() true se o jogo está em tela cheia. if (Window::fullscreen()) ...
void Window::setScale(WindowScale scale) Como a imagem é ampliada: WindowScale::Integer, Fit (manter a proporção) ou Stretch. Window::setScale(WindowScale::Fit);
WindowScale Window::scale() Como a imagem está sendo ampliada. if (Window::scale() == WindowScale::Fit) ...
void Window::setSize(int width, int height) Muda o tamanho da janela, em pixels de tela. Em tela cheia não faz nada. Window::setSize(1280, 720);
int Window::width() e height() O tamanho atual da janela. int w = Window::width();
int Window::screenWidth() e screenHeight() O tamanho do monitor. if (Window::screenWidth() >= 1920) ...

A resolução do jogo não muda com setSize: a imagem é ampliada para o tamanho novo.

Veja Cenário com tiles e Fundo com parallax.