Como posso fazer um personagem ficar nas encostas?

8

Antes de tudo, observe que eu quero entender o princípio, então eu preferiria explicações em inglês simples (mas é claro que não tenho nada contra algum código para complementar essas explicações).

Eu estou imaginando qual é a maneira de fazer um personagem pisar corretamente em uma ladeira. Vamos começar com duas capturas de tela do jogo Limbo para mostrar o que eu quero dizer: Personagem principal do limbo em pé em uma encosta Personagem principal do limbo em pé em um terreno plano
Então, como você pode ver nessas fotos, parece a espinha do o personagem é realmente perpendicular ao horizonte e não à superfície do solo, e essa observação me leva à minha pergunta:
como você pode reproduzir esse comportamento com o Sprite Kit? Porque se eu anexar um corpo físico a um nó, tenho a possibilidade de deixá-lo girar, para obter algo assim: Podemos ver que o sprite segue o chão em que está, então os pés do personagem estão no chão, mas sua coluna não é perpendicular ao horizonte, mas mais ao chão

Se eu desativar a rotação, obteria algo mais parecido com isto: Aqui a coluna é perpendicular ao horizonte, mas os pés do personagem não tocam o chão.  De fato, existe apenas um canto do sprite que toca o chão
Como você pode ver, essas maneiras de apresentar as duas questões importantes não parecem naturais. Então, como devo fazer para que pareça natural? Pensei em criar vários sprites e vários corpos físicos e, em seguida, anexá-los todos juntos com juntas. Não acho que parecerá natural, porque se você olhar para isso: insira a descrição da imagem aqui
Embora eu possa conectar fisicamente esses nós, como vou fazê-los parece real graficamente? Porque na realidade, por exemplo, a coxa e a panturrilha estão ligadas por um joelho ...

Alguma ideia ?

Trevör
fonte
11
Tente ficar em uma encosta e veja como isso acontece. Quando você coloca uma perna na frente da outra, a perna mais alta tem que dobrar para compensar a inclinação. Portanto, sua abordagem com várias articulações é uma boa opção.
Eejin
@ Eejin Ok, obrigado, e o realismo gráfico no nível das articulações? O que posso fazer para vinculá-los naturalmente? Para não fazer parecer que existem vários nós?
Trevör 22/06
Depende de alguns aspectos do seu jogo. Obviamente, partes do corpo bem desenhadas ajudam. Você poderia fornecer um pouco mais de informações sobre tamanhos e quão importante é o detalhe perfeito?
Eejin
Se seu chão é sempre, digamos, grama alta, apenas o uso do ponto baixo do sprite pode ser bom, já que as pernas dos personagens serão obscurecidas até o ponto em que você não pode dizer como elas estavam.
Jzx 23/06
Não conheço o SpriteKit, mas muitos jogos representam o jogador como uma forma de "cápsula" ou "pílula", em vez de um retângulo. Além disso, o objeto de física geralmente é menor que o próprio sprite.
Thane Brimhall

Respostas:

6

Para expandir a resposta de Josh Petrie, encontrar o ângulo do pé também é bastante direto.

insira a descrição da imagem aqui

O ângulo dos pés é igual ao ângulo da superfície inclinada. Como temos convenientemente dois pontos nessa inclinação, podemos encontrar o ângulo de inclinação (também é possível usar dois cantos da forma triangular da inclinação, mas as inclinações graduais se tornam mais complicadas; para colinas, esta é a melhor solução). Por fim, a inclinação será H / P (assumindo que o calcanhar da perna dobrada esteja diretamente abaixo do quadril correspondente), ou arctan (H / P) rad. Usando cossenos, pode-se facilmente descobrir que H = (F + T) - (Fcosθ + Tcosφ).

O ângulo do pé se torna arctan ((F (1-cosθ) + T (1-cosφ)) / P)

PS: Se você quiser REALMENTE entrar, também poderá encontrar a largura adicionada a P.

PSS: O pé apenas dobrará para muito longe; lembre-se disso antes de tentar subir uma inclinação de 80 graus.

PSSS: As pessoas não escalam colinas nos calcanhares, mas descansam nelas. Manter o pé perfeitamente nivelado na colina pode representar com alguma precisão o jogador em pé nas pontas dos dedos dos pés, e permitir que o calcanhar afunde no chão enquanto estiver ocioso pode gerar movimentos muito realistas.

igrad
fonte
5

Existem soluções e truques simples que você pode usar (por exemplo, se todas as suas inclinações tiverem um ângulo fixo, apenas crie sprites adicionais para movimento inclinado e inativo, forneça um mecanismo para o código do jogo saber se você está em uma superfície inclinada e renderize adequadamente - geralmente é o que os jogos mais antigos baseados em sprites fizeram).

Uma solução geral, expandindo sua ideia de sprite de múltiplas articulações, é usar a cinemática inversa para resolver o posicionamento dos pés de um personagem ( veja também ).

Isso envolve a definição de uma estrutura esquelética lógica para seus personagens, representada visualmente por vários sprites distintos (para o tronco, quantas partes de perna você precisar e pé). O efeito final neste sistema é a posição do pé do personagem na encosta, que pode ser calculada a partir da posição do tronco (fixa) e uma ideia de qual pé está à frente, com base na estrutura atual do ciclo de caminhada. Entre essas duas posições conhecidas, um sistema IK pode resolver os parâmetros para as articulações das pernas e criar uma aproximação razoável de como qualquer bípede real pode se estabilizar em uma superfície inclinada.

O IK é frequentemente expresso como um problema 3D, mas pode ser reduzido ao espaço 2D com relativa facilidade. Em 2D, você não precisa mexer com quase tantas restrições de rotação de juntas para criar movimentos realistas quanto faria em 3D, o que é bom.

Esse é o método usado por muitos jogos 2D modernos, especialmente devido à tendência de composições de sprites baseadas em esqueletos para personagens, em vez da técnica mais antiga de criação manual de todos os quadros.


fonte