Estou criando um jogo simples do Plattformer Jump n 'Run Style. Eu não uso peças - em vez disso, tenho formas geométricas para minhas entidades de nível (e o jogador também é um). Terminei meu código de detecção de colisão e tudo funciona bem até agora.
Em seguida, eu queria implementar o salto. Basta verificar se o jogador pressiona a tecla apropriada e adicionar alguma velocidade para cima. Funciona bem. Mas funciona mesmo que o jogador esteja no ar, o que não é o que eu quero. ;-)
Então, eu tenho que verificar se o jogador está em alguma coisa. Minha primeira idéia foi verificar se houve uma colisão no último quadro e marcar o jogador como "capaz de pular", mas isso seria acionado se o jogador atingisse uma parede no ar. Como minhas habilidades matemáticas não são tão boas, peço ajuda - até dicas sugeririam como implementar isso.
Obrigado!
Você certamente deve implementar algum tipo de tipo de superfície. Pense nisso, como você vai conseguir se consegue subir uma escada se não sabe se seu personagem acabou de colidir com uma parede ou uma escada? Você pode simplesmente usar o OOP para gerenciar uma hierarquia de tipos usando herança, mas eu sugiro que você use "categorias" implementadas usando um tipo enumerado:
Aqui está a idéia: Uma enumeração "Colisões" possui um sinalizador para cada categoria. Por exemplo:
Com esse método, você poderá testar se o jogador justificou alguma coisa que deveria gerenciar, para que seu mecanismo possa chamar um método "colidido" da entidade:
O método usa sinalizadores bit a bit e o operador "Or" bit a bit para garantir que cada grupo tenha um valor diferente, com base no valor binário da categoria. Esse método funciona bem e é facilmente escalável para que você possa criar grupos de colisão alfandegária. Cada entidade (jogador, inimigo, etc.) do seu jogo possui alguns bits chamados de "filtro", que são usados para determinar com o que ela pode colidir. Seu código de colisão deve verificar se os bits correspondem e reagem de acordo, com algum código que pode se parecer com:
fonte
Se você considerar o pé do seu personagem sempre sob o personagem por uma certa distância, e se você não estiver se afastando da superfície, seu personagem estará no chão.
Em pseudo-código aproximado:
fonte
char
, nem mesmo em pseudo-código.