Como um jogo 2D como Zelda lida com o personagem atrás de edifícios, onde apenas uma parte dele é mostrada?

28

Estou tentando desenvolver um jogo simples no estilo Zelda. Eu achei esse tópico muito útil

Como o LoZ: A Link to the Past lidou com colisões de sub-blocos?

que estou usando como referência para desenvolver meu mecanismo de detecção de colisões. No entanto, há algo que não consegui entender. Quando Link está atrás de edifícios, apenas parte dele é mostrada. Alguém pode me ajudar a entender como esse efeito pode ser alcançado? O edifício não faz parte do plano de fundo?

Tinadm
fonte
Eu gosto de pensar no estilo de renderização como tendo uma camada de solo (grama, piso de azulejo, etc.), uma camada de objeto (vasos, inimigos, shurbs, link etc.) e uma camada de céu (telhados, vasos levantados, copas de árvores) etc). A lógica para mover as coisas entre as camadas pode ser um pouco estranha no exemplo de vasos, mas isso é outra questão.
Benjamin Perigo Johnson

Respostas:

32

Os jogos 2D lado a lado geralmente têm mais camadas, que são renderizadas em diferentes camadas - algumas são renderizadas em segundo plano, outras acima do jogador.

Essa parte do telhado fica acima do jogador e é por isso que o jogador pode ir atrás desse edifício.

Aqui está o exemplo da imagem do meu jogo para explicar melhor: insira a descrição da imagem aqui

Blodyavenger
fonte
Portanto, o próprio edifício pode fazer parte do plano de fundo, mas o telhado faz parte de uma camada diferente desenhada no topo da camada com os sprites?
Tinadm
2
@Tinadm, ele não precisa necessariamente ser o telhado inteiro; pode ser apenas a seção do telhado que seria desenhada sobre o player que é renderizado depois de tudo o mais.
Tetrad #
7
+1 para gráficos impressionantes. Realmente ajuda os alunos visuais.
precisa
1
Tenho certeza de que os antigos SNES JRPGs usaram a mesma técnica. FF2, FF5, etc. A técnica ainda é válida.
Hatoru Hansou
1
Você pode ver isso muito bem com emuladores, como o ZSNES, que permitem ativar e desativar manualmente camadas individuais.
precisa saber é o seguinte
5

Enquanto a resposta de Blodyavenger cobre como é mais provável, aqui está outra possibilidade que permitiria uma fácil mudança de perspectiva (por exemplo, quatro ou oito direções diferentes ou alguns níveis de elevação da câmera):

Considere a vista de cima para baixo do seu mapa, por exemplo

  ABCDEFGHIJKL
1 +-----=----+
2 |  .    .  |
3 |    X   o |
4 | .        ||
5 |    .   . |
6 +--=-------+

Onde, digamos, Xmarca um pilar alto. Para cada objeto, você armazena imagens de todas as perspectivas possíveis (ou usa o mesmo ...), que podem ser arbitrárias com muitos ladrilhos. Agora, ao desenhar, basta começar com a coluna ou linha que está na parte de trás da perspectiva atual, por exemplo, linha 1, se estiver olhando para o sul. Depois disso, desenhe a linha / coluna a segunda mais para trás e assim por diante. Dessa forma, quando algo estiver mais alto do que um bloco (esticado para a perspectiva atual), ele simplesmente excederá o que está por trás.

(Desculpe pela falta de boas fotos, não sou muito bom em gráficos aplicados ...)

Tobias Kienzler
fonte
Observe como você pode facilmente alterar a elevação da câmara desta forma, esticando as texturas de objetos
Tobias KIENZLER
1

Você deve ter uma variável para profundidade e ter as imagens com maior profundidade desenhadas primeiro, depois as outras com menor profundidade. E a profundidade de cada objeto deve ser igual ao negativo de sua coordenada y.

Depth=-y

Ahmed Elyamani
fonte