Fazendo um personagem se mover ao longo de uma encosta curva em um mundo com gravidade

10

Eu já vi esse jogo

Calças extravagantes 2 . E o que notei, além da física e das belas animações, é que o personagem está se movendo ao longo de encostas, até encostas curvas. Tenho pouca experiência no Box2d, mas esse conceito de pistas curvas é novo para mim. Seria uma grande ajuda para mim se alguém me esclarecesse sobre esse conceito e sua implementação. Mesmo que a implementação não esteja no box2d, isso é bem-vindo.

Vishnu
fonte
2
Metanet, os caras que fizeram N (que está em Flash) tem um tutorial sobre como eles fizeram colisões que trata de como eles calculam curvas: metanetsoftware.com/technique/tutorialA.html
CodexArcanum

Respostas:

5

Como você obtém curvas no Box2D?

Na versão não lançada do Box2D , existem dois novos tipos de formas, b2LoopShape e b2EdgeShape , que permitem criar curvas a partir de uma sequência de segmentos de linha.

Na versão lançada, você pode usar várias pequenas caixas definidas em ângulos para obter um efeito semelhante, mas os corpos tendem a fazer coisas instáveis ​​e inesperadas perto dos pontos de conexão. Então, eu recomendo usar a versão não lançada.

Como um personagem pode cair na curva?

Faça do personagem uma roda! Minha pergunta sobre a física de plataformas tem alguma discussão sobre isso , mas a idéia básica é montar o corpo do seu personagem em uma roda rotativa e mover aplicando força de rotação à roda. Mesmo que (na verdade, porque) a roda tenha atrito, a força descendente da gravidade fará com que ela gire ladeiras - como uma roda real. Alterando os parâmetros do motor da junta de revolução , você pode resistir à rotação o quanto for necessário para evitar rolagens pequenas.

Comunidade
fonte
Concordo com você. Ao usar o b2LoopShape, eu poderia criar uma inclinação como meu desejo. Mas, seguindo o link que você postou; O problema é que não leva a uma porta flash do box2d apenas uma versão c ++. 1.) Você tem alguma sugestão para isso? ou 2.) Você conhece algum outro mecanismo de física para flash que permita a criação de pistas curvas?
Vishnu
Não acho que a porta Flash do Box2D esteja atualizada com os novos tipos de junta / forma. Não tenho idéia de quais mecanismos de física estão disponíveis para o Flash além do Box2D.
@ Joe: Se eu perguntar, seria possível se eu tentasse escrever uma classe AS para o b2LoopShape? Para que eu pudesse incorporá-lo na API do Box2d Flash. Para onde eu teria que começar a dirigir? Qualquer pista?
Vishnu
1

O Fancy Pants foi criado no Flash, e o Flash possui um método específico chamado 'hitTest', que permite testar um pixel (nesse caso, ele provavelmente realiza 2-3 testes de hit de pixel ao longo da parte inferior do personagem Fancy Pants) em relação ao que for desenhado dentro de um objeto de clipe de filme designado. Pode ser um pouco complicado fazer com que pareça certo, mas essa função integrada é a razão pela qual tantos jogos em Flash têm colisões com inclinações curvas. O processo é muito mais complicado para a maioria dos outros mecanismos e geralmente precisa ser feito manualmente, mas existem alguns métodos diferentes.

O método com o qual estou mais familiarizado é que, se seu mecanismo for baseado em blocos (pense em Sonic the Hedgehog), os blocos designados como curvos podem ter uma fórmula que determina a posição de colisão 'Y' com base na atual posição 'X' do personagem naquele azulejo. Você precisaria determinar a fórmula com base na inclinação de uma inclinação e na curva que procura. Você pode usar uma calculadora gráfica ou um programa gráfico para experimentar as fórmulas. Você pode ter vários blocos com diferentes curvas e fórmulas associadas a eles dessa maneira.

Brian Cable
fonte
Sonic não tem uma fórmula de curva para os ladrilhos. Ele usa um mapa de altura em 2D para cada pixel.
precisa
@ AttackingHobo: Você pode me dizer o que é o mapa 2dheight para cada pixel ou pode me indicar um local onde eu possa usá-lo nos meus jogos em flash?
Vishnu
2
info.sonicretro.org/Sonic_Physics_Guide Dê uma olhada nisso. Não sei se isso irá ajudá-lo se você usar a caixa 2d. Você pode ter que usar seu próprio mecanismo de física.
precisa
@ Attacking Hobo: Existe alguma vantagem ou possibilidade em "fazer" inclinações curvas Se eu tentar criar uma classe AS 3.0 que permita loops na API box2d?
Vishnu