Como lidar com portas animadas em ladrilhos isométricos

10

Eu tenho um problema complicado, não tenho certeza de como lidar melhor: tenho uma peça animada de uma porta. Quando fechado, ele deve ser classificado de uma maneira, mas quando aberto, ele precisa ser classificado de uma maneira diferente, pois pertence a um diferente (bloco vizinho).

Aqui está a porta fechada:

Porta fechada

e a porta se abriu:

porta aberta

Eu imagino que seria possível substituir o sistema de classificação para esses blocos e ajustar a classificação com base no quadro, mas parece um pouco hacky.

Alguém já encontrou um cenário semelhante? Alguma solução elegante?

George Profenza
fonte
2
Como seu sistema de classificação atualmente detecta a ordem de desenho dos ladrilhos?
Roy T.

Respostas:

4

Talvez você possa fazer uma porta com dois objetos, em ladrilhos diferentes, e mostrar apenas um deles de cada vez. Dessa forma, a porta aberta também pode bloquear o movimento, o que parece meio realista.

deixa pra lá
fonte
4

Crie três sprites ...

  1. Porta fechada (como seu primeiro sprite) - bloqueia o movimento
  2. Apenas a moldura (poste no seu caso) da porta, mas nenhuma porta - não bloqueia o movimento
  3. Apenas a porta na posição aberta - bloqueia o movimento

Quando a porta estiver fechada, desenhe o sprite 1 e trate-o como um "bloqueador" para que os jogadores não possam atravessá-lo.

Quando a porta estiver aberta, substitua o sprite por # 2 (apenas o pilar da porta). Em seguida, coloque o sprite nº 3 (apenas a porta) na célula adjacente em que a porta estaria.

Fechar é apenas remover a porta e substituir o poste por poste + porta na posição fechada.

Com essa configuração, você não precisa se preocupar em renderizar a porta aberta em nenhum pedido especial. Basta renderizá-lo na ordem como qualquer outro objeto no quadrado em que ele se encontra.

A desvantagem é que você não pode ter o jogador ou qualquer outro objeto na praça onde a porta aberta irá.

Tim Holt
fonte
3

Existem dois truques que eu uso para classificar em 2D:

  • Adicione a posição do solo aos sprites; este é um ponto em que o sprite toca o chão (pés femininos, tronco de árvore, batente da porta) e o classifica em vez de pixels dos sprites. Dessa forma, o sprite não será afetado pela animação

  • Adicione childs não classificáveis ​​aos objetos (as mulheres podem ter vários childs que não afetam a classificação - manto, arco, espada, etc., a moldura da porta tem a porta da criança). Dessa forma, a animação de sprites filhos também não afeta a classificação.

Kromster
fonte
1

A melhor maneira de resolver a classificação de objetos é não classificar de maneira alguma. Se você usar um buffer de profundidade, poderá renderizar tudo de uma só vez. Objetos com um valor z mais alto estarão mais distantes do que objetos com um valor z mais baixo.

Mesmo se o seu jogo for 2D, você ainda deve considerar o uso de coordenadas 3D com um buffer de profundidade, caso contrário, você tocará para sempre o algoritmo do pintor .

knight666
fonte
É verdade, mas como determinar a posição Z? Somente por classificação
Kromster
Sim, mas essa classificação agora acontece offline, em vez de durante a renderização. Agora, o designer de níveis pode criar o nível com os valores Z em mente, sem precisar se preocupar com o corte de objetos.
knight666