Eu tenho um controlador de caracteres básico configurado para um jogo de plataformas 2D com Box2D e estou começando a ajustá-lo para tentar fazê-lo se sentir bem. Os mecanismos de física têm muitos botões para ajustar, e não está claro para mim, escrevendo com um mecanismo de física pela primeira vez, quais devo usar. O salto deve aplicar uma força para vários carrapatos? Um impulso? Definir velocidade diretamente? Como faço para impedir que o avatar cole nas paredes sem remover todo o atrito (ou retiro todo o atrito, mas apenas no ar)? Devo modelar o personagem como uma cápsula? Uma caixa com cantos arredondados? Uma caixa com duas rodas? Apenas uma roda grande? Eu sinto que alguém deve ter feito isso antes!
Parece haver muito poucos recursos disponíveis na Web que não são a "primeira física do bebê", todos cortados onde espero que alguém já tenha resolvido os problemas. A maioria dos exemplos de mecanismos de física para plataformas tem controles flutuantes, saltos no ar ou comportamento facilmente explorável quando a penetração temporária é muito alta, etc.
Alguns exemplos do que quero dizer:
- Um pequeno toque de salto salta a uma curta distância; uma torneira longa salta mais alto.
- Deslizamentos curtos ao parar ou reverter as direções em alta velocidade.
- De pé de forma estável em declives (mas talvez deslizando para baixo quando se esquivar).
- Velocidade analógica ao usar um controlador analógico.
- Todas as outras coisas que separam bons criadores de plataforma dos ruins.
- Ouso sugerir plataformas móveis estáveis?
Eu realmente não estou procurando "ei, faça isso". Obviamente, a coisa certa a fazer depende do que eu quero no jogo. Mas espero que alguém em algum lugar tenha examinado as possibilidades e tenha dito "a técnica bem A apresenta X bem, a técnica B bem Y, mas isso não funciona com C", ou tem alguns exemplos funcionados além "if (key = = espaço) character.impulse (0, 1) "
Honestamente, não acho que o uso de um mecanismo de física seja a abordagem certa para algo desse tamanho de domínio com requisitos super rígidos.
Basta escrever tudo sozinho. Você obterá resultados muito melhores dizendo "mova o caractere para cima por x unidades nesta forma de parábola ao manter pressionado o botão de salto para o comprimento y" do que tendo vários botões para ajustar.
fonte
Escrevi uma série de artigos sobre a criação de um jogo de plataforma desde o início usando tecnologias modernas e inclui como eu lidei com a física simples:
http://www.wildbunny.co.uk/blog/2011/12/14/how-to-make-a-2d-platform-game-part-2-collision-detection/
No entanto, se você quiser algo mais de alta tecnologia, é perfeitamente possível abordar isso usando um mecanismo de física completo. Aqui está uma técnica que você pode usar (do Little Big Planet) que torna o personagem do jogador uma parte totalmente integrada do mecanismo de física:
Em vez de aplicar impulsos ou definir velocidades para mover o jogador como 'entradas externas' para o mecanismo de física, você pode desenvolver uma restrição que controla o personagem.
Portanto, essa restrição terá a velocidade e a direção desejadas do jogador como entrada (do jogo) e modelará coisas como a força e velocidade máximas do jogador. A restrição tentará mover o jogador de acordo com suas entradas (e obedecendo aos máximos) e, por ser uma restrição, aplicará uma força igual e oposta ao objeto em que o jogador está, permitindo assim que o jogador fique em plataformas móveis e afetar as coisas sobre as quais ele se move.
Fazer coisas assim significa que o jogador pode, naturalmente, ser capaz de lidar com situações como estar sob uma pilha enorme de caixas ou pular em várias plataformas móveis, porque ele agora é uma parte essencial do mecanismo de física.
Espero que ajude!
Saúde, Paul.
fonte
Esta questão teve uma discussão significativa nos fóruns do Box2D. Lendo as discussões sobre movimento de personagens, saltos ou plataformas, você encontrará todas as questões possíveis. No entanto, o problema ficou complicado o suficiente para que o sistema de filtragem de colisões fosse atualizado e um exemplo do Test Bed criado exclusivamente para mostrar como deveria ser feito.
fonte