2d, mapa de cima para baixo com diferentes níveis

7

Então, eu estou criando um jogo 2D, de cima para baixo, baseado em sprites (lado a lado), e agora estou trabalhando em mapas (bem, um editor de mapas no momento, mas ele estará criando meus mapas, basicamente o mesmo coisa).

O cenário

Então, estou pensando em eficiência e criando um mapa em pedaços. Em cada peça, pretendo ter 'camadas'. Basicamente, pretendo reduzi-lo para um nível 'abaixo do herói' e um nível 'acima do herói', com o herói processado obviamente. Provavelmente também haverá uma camada 'no nível do herói', mas ainda não estou lá. Ainda nem se preocupe com eventos ou interação. Só estou procurando um herói na tela.

Agora, quanto ao movimento, obviamente preciso saber quais peças podem ser movidas e em que direção. Meu plano no momento é que cada bloco receba 8 bits (4 'pode entrar na direção' bits, 4 'pode sair na direção'). Isso me permitirá limitar o movimento e até permitir um movimento direcional de sentido único.

O dilema

Isso funciona muito bem para muitos cenários. Isso permitirá que eu armazene um mapa em essencialmente 3 camadas, uma string e me dê flexibilidade no futuro. No entanto, não consigo criar mapas que tenham camadas. Um bom exemplo é uma ponte em que o usuário pode passar por cima ou por cima da ponte sem que movimentos inválidos sejam permitidos. Não consigo criar uma plataforma e permitir movimentos por baixo. Essas são coisas que eu gostaria de poder incluir no meu jogo.

Minha ideia

Em teoria, eu poderia permitir várias camadas de heróis e, em seguida, permitir vários conjuntos de camadas 'abaixo' e 'acima' (ou camadas sanduíche). Mas isso complica meu sistema e torna os movimentos entre mapas potencialmente complicados (se o herói está na terceira camada na borda de um mapa, mas isso corresponde à segunda camada no outro mapa, como posso permitir ou impedir o movimento).

Minha pergunta

Existe uma maneira melhor de gerenciar vários mapas com vários níveis como este, onde um nível de usuário pode ser 'conectado' em diferentes níveis em diferentes mapas?

Ou até ...

Estou fazendo isso da maneira mais difícil? Existe uma maneira mais padrão de lidar com mapas 2D lado a lado que não conheço?

Coisas a serem observadas ou que podem ser úteis

  • Isso será feito em Javascript (transferido em JSON)
  • O estado precisará ser transferido rapidamente, portanto uma identificação de mapa e uma direção x / y / devem ser suficientes para obter um valor booleano 'pode se mover'
  • Os mapas não terão tamanho padrão (embora estejam em um determinado número de blocos)
  • Criar uma ferramenta de edição para que eu possa ajudar outras pessoas, para que algo que eu possa criar em uma ferramenta seja útil
  • Os locais de 'teletransporte' provavelmente precisarão existir para entrar na construção de mapas e para e de diferentes conjuntos de mapas (que não necessariamente serão conectados), mas ainda não foram criados (concentrando-se nos eventos no momento).
LoveAndCoding
fonte

Respostas:

2

nível 'abaixo do herói' e um 'acima do herói'

Por que as camadas precisam ser relevantes para o Herói? Não deveria ser o contrário, pois no herói o nível atual está? Se o herói estiver no nível 1, todos os níveis acima do nível 1 serão sorteados após ou em cima do herói. Isso funciona para qualquer número de níveis, para que você não fique restrito a 2 níveis. Você pode fazer o jogador acompanhar o nível em que está e alterá-lo com a detecção básica de colisão. Uma série de ladrilhos de parede a parede no topo de uma caixa de escada pode definir o jogador para a camada 1, onde, da mesma forma, o jogador pode colocar o nível 0 na parte inferior da escada.

Você só faria checagem de colisão para a camada atual; assim, no caso de passar por baixo da ponte, poderia caminhar por baixo dela se não houvesse obstrução na camada 0, enquanto todas as camadas acima seriam renderizadas apenas.

ClassicThunder
fonte
Você sabe, eu originalmente mudei dessa abordagem por causa do editor, mas acho que você está certo, isso será o mais sensato. Acho que vou fazer camadas no editor, agrupadas por nível, e criar um espaço de movimento baseado em nível. Obrigado
LoveAndCoding