/ Como os objetos sólidos do jogo de plataformas devem ser implementados de forma eficiente? - algoritmo, implementação

Como os objetos sólidos do jogo de plataformas devem ser implementados de forma eficiente? - algoritmo, implementação

Eu tenho tentado escrever um motor de plataformaspor algumas vezes agora. O problema é que não estou satisfeito com meus detalhes de implementação em objetos sólidos. (parede, piso, teto) Eu tenho vários cenários que gostaria de discutir.

Para um jogo de plataforma simples como o primeiroMario, tudo é praticamente blocos. Uma boa implementação deve apenas verificar a colisão necessária, por exemplo, se o Mario estiver rodando e, ao final do caminho, houver um precipício, como devemos verificar a colisão com eficiência? Devemos sempre verificar cada passo que Mario está dando para ver se a hitbox dele ainda está no chão? Ou existe alguma outra maneira de programação que nos permita não lidar com isso a cada quadro?

Mas os blocos são chatos, vamos colocar algumas encostas. Implementação detalhada, como as pistas devem ser tratadas? Alguns jogos como Sonic, tem essa estrutura de loop que o personagem pode ir "woohoo" no loop e prosseguir.

Outro cenário é o manuseio de objetos "sólidos" (piso, teto, parede). Em Megaman, podemos ver que o jogador pode passar pelo teto usando uma ferramenta para entrar na "parede" sólida. Possivelmente, a programação aqui é forçar ojogador para sair da parede para que o jogador não fique preso, movendo o jogador rapidamente para a direita. Este é um método antigo de "contornar" para evitar que o jogador pule na parede. Nos jogos mais novos atualmente, o identificador é mais complexo. Tomemos, por exemplo, o Super Smash Brawl, onde os jogadores podem ampliar os personagens (junto com o hitbox). O programa permite que o jogador se mova "dentro" do teto, mas quando o personagem está fora da área "sólida", eles não podem Além disso, às vezes, um personagem é gigantesco que eles passam por 3 pisos sólidos de uma cena e eles ainda podem se mover dentro de bem. Alguém conhece detalhes de implementação nesse sentido?

Então, aqui, eu sei que existem muitosimplementação possível, mas eu só quero perguntar aqui que há alguns detalhes técnicos avançados para o jogo de plataformas que eu deveria estar ciente? Atualmente estou pedindo 3 coisas:

  1. Como deve ser colidida uma colisão sólida de jogos de plataforma de forma eficiente? Podemos tomar menos tempo para verificar se um personagem correu e caiu completamente de uma plataforma?

  2. Programação de inclinação. No começo, eu estava pensando em motores de física, mas acho que pode ser um exagero. Mas aqui, vejo que as encostas são praticamente outros tipos de piso que "empurram" ou "puxam" o personagem para diferentes altitudes. Ou deveria ser programado de forma diferente?

  3. Manipulação de objetos sólidos para casos especiais. Pode haver um tempo em que o jogador pode entrar nos objetos sólidos por meio de regras legais ou falhas, mas, em geral, é sempre uma má idéia levar o jogador a uma direção aleatória se ele estiver em uma parede.

Respostas:

1 para resposta № 1
  1. Para um pequeno número de objetos, fazendo todos os paresverificação de detecção de colisão em cada etapa de tempo é bom. Depois de obter mais do que algumas centenas de objetos, você pode querer começar a considerar um método mais eficiente. Uma maneira é usar um particionamento de espaço binário (BSP) para verificar apenas os objetos próximos. A detecção de colisão é um tópico muito bem pesquisado e há uma infinidade de recursos descrevendo várias otimizações.
  2. De fato, um motor de física é provavelmente um exageroesta tarefa. De um modo geral, você pode associar com cada personagem em movimento um "chão" no qual ele está de pé. Então, sempre que ele se move, você simplesmente o faz se mover ao longo do eixo do solo.
  3. Escorregar em objetos é quase sempre uma má ideia. Tente evitá-lo, se possível.