Como determinar se o personagem caiu na brecha em um corredor / jumper infinito?

12

Estou construindo um corredor infinito 2D. No jogo, o personagem salta de um pilar para o outro e os pilares são gerados aleatoriamente. Eu tenho esse trabalho. Mas como determinar se o personagem falhou em pular para um pilar e caiu no espaço entre os pilares? Um pilar é de forma retangular comum.

SanSolo
fonte
OT: Embora essa pergunta tenha sido publicada no rpg.SE e pensei: "Que tipo de exploração de regra foi encontrada agora? Infinito, como?"
o0 '.

Respostas:

20

Adicione uma região retangular na parte inferior do nível, abaixo da altura mínima permitida de uma plataforma. Se o jogador cruzou esta região, ele caiu de uma plataforma.

mklingen
fonte
1
E tornar esse retângulo um filho da câmera para que ele se mova com a câmera e esteja sempre presente? Isso é tão fácil. Obrigado.
Sansolo
Mesmo que o jogador não consiga passar do nível, acho que essa é uma boa salvaguarda se ele, de alguma forma, conseguir.
Mucaho 16/04
5
Se você estiver literalmente verificando a interseção, certifique-se de que seu personagem não caia tão rápido a ponto de atravessar a superfície (ou seja, um do personagem é inteiramente acima e o próximo quadro, abaixo).
wchargin
2
Sim, o ret deve se estender o mais baixo possível para evitar isso. Apenas verificar a altura funcionará, mas isso lhe dará a flexibilidade de redimensionar a "região de matança", dependendo do nível.
Mklingen
6
Para evitar "recorte" através do retângulo, por que não um simples if (playerPos.x < minHeight)?
Cole Johnson
24

Se o seu jogo rola apenas na horizontal, você pode verificar se a posição vertical do personagem está abaixo da borda inferior do palco.

Se o seu jogo rolar verticalmente também (provavelmente para cima), você pode verificar se o jogador caiu abaixo da borda inferior da visualização (ou seja, a área do palco que está na tela ou no foco da câmera).

Em geral, a condição de morte é se o personagem não permanecer "na câmera". Ao controlar o movimento da sua câmera, você poderá ajustar sua jogabilidade. Por exemplo, se em um estágio de rolagem vertical, você apenas permite que a câmera faça um "elástico" um pouco para baixo, enquanto permite movimento total para cima, penalizando quedas profundas e fora da tela.

Jelle van Campen
fonte
Sim, também é uma maneira fácil. Eu só preciso descobrir a posição mais baixa.y que o personagem possa ser.
SanSolo
1
Corrigir! no caso de um rolador horizontal, você pode simplesmente verificar o tamanho vertical do palco no seu editor de mapas. No caso de um rolo vertical, você pode garantir que a câmera se mova apenas para cima. Dessa forma, se o personagem cair, ele terminará abaixo da vista da câmera. Você pode simplesmente verificar se a posição vertical do personagem fica abaixo do limite inferior da visualização.
Jelle van Campen
@JellevanCampen: Você não precisa limitar a câmera ao movimento para cima necessariamente. Você pode matar personagens que não conseguem permanecer "na câmera" ou fazer com que a câmera os siga.
precisa
Não gosto muito dessa resposta porque ela liga a câmera diretamente aos limites do nível. A resposta de mklingen funciona mesmo que os limites do nível tenham mais de uma altura de tela. A câmera pode se mover para cima e para baixo para focar no personagem, mas não há risco de o personagem cair mais rápido que a câmera, permanecer no nível, mas ainda colidir com a caixa de limite anexada diretamente à câmera.
Kevin
2
@ Kevin: Eu concordo em jogos em geral, mas não em scrollers infinitos gerados proceduralmente. Por exemplo, em roladores verticais, você teria que continuar gerando novas caixas e despawnar caixas fora da tela ou teria que continuar atualizando as caixas à medida que a câmera se move. Como a condição de morte está diretamente ligada à "falha em permanecer na câmera", faz sentido vincular a condição à câmera. Também é mais eficiente executar uma verificação dos limites da câmera, em vez de gerar novos objetos e recorrer à verificação de colisões.
Jelle van Campen
2

Como alternativa, para verificar a coordenada vertical , você pode apenas verificar a velocidade vertical. Se o personagem está caindo mais rápido do que algum limite, concluímos que eles estão mortos (mesmo se não é alguma plataforma baixa o suficiente para ainda alcançar, o impacto seria fatal).

Obviamente, isso só funciona se o seu jogo implementar corretamente a física básica de queda livre, ou seja, a velocidade descendente realmente aumenta durante a queda, como na realidade (até a velocidade terminal).

leftaroundabout
fonte
1

Se você tiver altura dos pilares, poderá encontrar o menor valor existente e compará-lo com a posição vertical do jogador. Se ele estiver abaixo do pilar mais baixo, não há chance de ele voltar. Você pode limitar essa verificação apenas aos pilares atrás e na frente do jogador.

Exemplo: Temos 3 pilares, com alturas [10, 20, 40]. O jogador pulou está no pilar com altura 40, ele salta para a frente para 20. Ele sentiu uma diferença entre 40 e 20, agora está na altura 15. Isso significa que ele se sentiu. Para uma verificação menos rigorosa, espere até ele ficar abaixo de 10.

Polan
fonte
Todos os pilares são do mesmo tamanho. É o intervalo horizontal entre dois pilares que varia :)
Sansolo
0

Mantenha uma contagem de quanto tempo um personagem caiu. (ou seja, há quanto tempo eles estão se movendo "para baixo"). Depois de terem caído mais do que uma tela cheia de tempo, eles, por definição, caíram do palco, sim?

Allen Gould
fonte