Quero poder fazer o que você vê na imagem, mas com uma única parede. O jogador deve poder andar em ambos os lados do mesmo objeto . Ou seja, a mesma parede fica abaixo do herói quando eu desço, e fica acima do herói se eu sair de cima dele.
É como duas profundidades na mesma parede, então não é apenas uma questão de desenhá-lo antes ou depois. Eu poderia cortar o objeto em dois, mas essa seria a solução fácil (e talvez computacionalmente cara). Como devo fazer isso?
2d
draw-order
depth
Xkynar
fonte
fonte
Respostas:
Aqui estão três maneiras de fazer isso. Qual será o mais adequado depende do tipo (graficamente) de jogo que você está criando.
Como o usuário Fabinout já comentou: "Dividindo o objeto em dois ... A parte superior fica atrás do personagem, e a parte inferior fica entre o jogador e o personagem". Se você estiver criando um jogo rigidamente baseado em blocos (os caminhos mostrados são os únicos dois caminhos possíveis perto da parede), essa é provavelmente uma boa maneira de fazê-lo. Observe que, para que isso funcione, a distância entre os caminhos superior e inferior deve ser pelo menos igual à altura do personagem.
Uma desvantagem desse método é que ele só ajuda em casos como esse em particular; não é uma estratégia geral para empilhar sprites.
Desenhe todos os sprites - tanto do jogador quanto do cenário - de cima para baixo na ordem de suas posições no nível do solo (base da parede, pés do jogador). Isso fará com que a parede seja mostrada automaticamente no lado correto e é uma estratégia comum para jogos com estilo "isométrico" e "2D RPG".
Outra vantagem disso é que geralmente parece bom, mesmo que objetos passem um pelo outro - por exemplo, personagens que não bloqueiam o movimento de outros; andando por um campo de grama alta. As desvantagens são que você precisa determinar com eficiência a ordem do desenho (por exemplo, classifique seus sprites ou tenha uma matriz 2D de ladrilhos que sabem quais sprites estão neles) e isso fica complicado quando você tem objetos que nem todos estão enraizados visualmente no mesmo nível do solo.
Tenha uma "camada frontal" e uma "camada traseira" onde seu personagem ocupa um ou outro (e a parede é desenhada depois das costas, mas antes da frente). Dependendo de como você se aproxima da parede, o personagem é alternado para a camada frontal ou traseira por zonas de gatilho. É assim que os jogos Sonic the Hedgehog lidam com coisas como loop-the-loops.
A vantagem é que você pode ter essencialmente dois planos 2D independentes para construir seus elementos de nível. No entanto, isso é mais apropriado para um jogo em que o movimento vertical está subindo, enquanto, pelo formato dos gráficos, o jogo parece ser aquele em que o movimento vertical na tela está se movendo para frente / para trás no chão, e há muito mais de duas posições diferentes nessa dimensão.
fonte
Desenhe objetos na ordem do
Y
valor, para que os objetos "mais distantes" (mais acima na tela) sejam desenhados antes / abaixo dos objetos "mais próximos". Que simples.Em geral, apenas forneça aos objetos um valor de profundidade (que pode ser implicitamente baseado
Y
ou definido explicitamente, dependendo do jogo e das necessidades) e renderize nessa ordem.Este é o "algoritmo do pintor" em ação.
fonte