Eu espero que todos nós tenhamos jogado Zelda: A Link to the Past, por favor, me corrija se eu estiver errado, mas quero imitar esse tipo de movimento de personagem 2D de cima para baixo com um toque de correção. Isso já foi feito em outros jogos, mas acho que essa referência seria a mais fácil de se relacionar. Mais especificamente, o tipo de movimento e correção de que estou falando é:
- Movimento flutuante não restrito ao movimento baseado em ladrilhos, como Pokemon e outros jogos em que um toque no bloco de movimento move você um quadrado nessa direção cardinal. Esse movimento flutuante deve ser capaz de obter movimento diagonal.
- Se você estiver caminhando para o oeste e chegar a um muro diagonal da maneira Nordeste / Sudoeste, você será corrigido para um movimento Sudoeste, mesmo se continuar segurando a esquerda (Oeste) no controlador. Isso deve funcionar para as duas diagonais, corrigindo nas duas direções.
- Se você estiver a alguns pixels de caminhar diretamente para uma porta ou corredor, será corrigido para caminhar pelo corredor ou pelo corredor, ou seja, esbarrar no canto faz com que você seja empurrado para o corredor / porta.
Procurei maneiras eficientes de conseguir isso e não tive sorte. Para deixar claro, estou falando do movimento do personagem humano, não do movimento de um NPC. Seus recursos estão disponíveis nesse tipo de movimento? Equações ou algoritmos explicados em um wiki ou algo assim?
Estou usando o XNA Framework, existe algo para ajudar nisso?
Como resposta possível para o segundo ponto, é projetar o vetor de movimento do jogador ao longo do vetor da parede usando um produto pontual (ab * normalizado (b)). Você então recebe um vetor que diz a que distância mover o jogador na direção da parede e, se você mover o jogador por esse vetor, obtém um 'slide' ao longo da parede. Funcionou bem para mim em um projeto de jogo anterior.
fonte
Ótima resposta para Josh, mas vou adicionar algumas sugestões: - Para obter mais informações sobre deslizar contra paredes, confira minha pergunta - a partir desta resposta, consegui fazê-la funcionar muito bem. - Se não me engano, ao subir a tela, o Link facilitará o alinhamento com o quadrado da grade horizontal mais próximo. Dessa forma, quando você chega às portas, é mais provável que esteja alinhado corretamente (pode estar errado). - Para facilitar a passagem pelas portas, verifique se a caixa de colisão do seu personagem é bem menor que a largura da porta.
fonte
Para corrigir a entrada de portas, você pode tornar o objeto de colisão para a porta um pouco maior que a imagem da porta. Isso resultaria no mesmo efeito proposto por Josh, mas sem ter que calcular a proximidade com o retângulo de colisão da parede.
fonte