Implementando a física da vista superior usando o box2D

7

Como os jogos de física da vista superior podem ser feitos no box2D? Uma idéia que tenho é definir a velocidade linear de um objeto manualmente ou alterar o amortecimento linear e angular à medida que meu objeto se move sobre superfícies diferentes. Por exemplo, se meu objeto estiver sobre uma superfície úmida, ele terá um amortecimento menos linear e, se estiver sobre uma superfície áspera, terá mais amortecimento. E para ver se meu objeto caiu de uma borda, tentarei usar um AABBe verificar se ele ainda está dentro ou manualmente, se object.x > boundary.xetc. Existe alguma maneira melhor?

Astromaz3
fonte

Respostas:

5

Veja b2FrictionJoint para simular "superfícies rugosas" de cima para baixo. O amortecimento de movimento não parece tão realista.

Basicamente, você pode anexar seus objetos a qualquer coisa usando uma junta de atrito para fazê-lo funcionar. (Eu anexo todos eles a um objeto de chão, mas não importa quão grande ou onde esteja.)

gritos
fonte
3

Se você simplesmente definir a gravidade como zero, a simulação de física funcionará bem para um jogo de cima para baixo.

jhocking
fonte
2
Desativar a gravidade não transforma o Box2D em uma simulação física de cima para baixo. Como você simularia o atrito com o solo? Que tal um carro que atravessa lama?
bummzack
Eu faria isso alterando a densidade ou atrito do carro ou algo usando sensores para a área de lama. É certo que isso é semanticamente hacky, porque esse não é o objetivo desses recursos, mas é uma maneira simples de manter o Box2D fazendo todo o trabalho para você.
jhocking
1

O Box2D foi projetado para funcionar com espaço bidimensional. Em um jogo de plataformas 2D, poderíamos descrever nossos objetos com uma base XY:

--------- X
|
|
|
Y

Nesse jogo não tem profundidade, tá? Se queremos ver esse mesmo jogo com uma vista de cima, nosso espaço precisa de uma terceira nova dimensão Z, para descrever a profundidade. O que acontece? Agora temos três dimensões, mas o Box2D foi projetado em duas dimensões.

O jogo pode ser visualmente bidimensional, mas a lógica é tridimensional neste caso. ( vista do topo ).

Eu acho que será melhor usar outra biblioteca de física 3D ou implementar uma você mesmo.

Eu nunca vi um jogo de vista superior usando o Box2D e ficaria muito grato se alguém conhece um.

momboco
fonte
2
Não concordo que a "lógica" seja necessariamente 3D. Para um jogo 2D, Z geralmente é apenas a ordem na qual os objetos são desenhados para fins visuais. Isso não precisa ser simulado ou vinculado à física.
Brian Ortiz
Eu disse que "nesse caso" precisamos de uma lógica tridimensional. O Z que você disse não é uma nova dimensão, é apenas uma forma de descrever a ordem relativa na qual os sprites devem ser desenhados. (Algoritmo de pintor)
momboco
No Box2D, a coordenada Y é a altitude (e aquela à qual a gravidade é aplicada). Não sei como mudar isso se você quiser um jogo com vista superior. Porque se você usa a gravidade, perde uma dimensão e é necessária uma terceira dimensão.
Momboco 7/03/2019
3
Aqui está um jogo de cima para baixo que usa o Box2D: sevengames.com/nitro-racers . Eu sei disso porque ajudei a programá-lo: P Os movimentos do veículo são um pouco irregulares, com ajuste manual da rotação, e o atrito sobre a grama também é feito manualmente, mas o resto (aceleração, batida e salto, colisão com o meio ambiente) ) é puro Box2D.
Bart van Heukelom 7/03/11
Muito obrigado. Eu tenho algumas questões. A colisão com o meio ambiente só produz que o carro pare. Você acha que a recuperação pode ser realizada com o Box2D? O atrito sobre a grama é implementado manualmente devido a algumas limitações do Box2D? Às vezes, quando desenvolvi jogos com vista superior, usei a lógica 3d com z para altitude e associei esse valor a uma escala (por exemplo, uma carcaça que é lançada de uma pistola). Com o Box2D não encontrei como lidar com isso.
Momboco 7/03
0

Como jhocking disse, é o mesmo usando o Box2D para uma vista lateral ou superior.

Apenas desative a gravidade e brinque com profundidades usando o filtro de colisão no manual do box2D.

porque não haverá força de gravidade, os objetos serão "mais leves" do que o normal, ao empurrá-los. Brinque com as massas e as forças para obter resultados equivalentes.

O que você chamou de amortecimento deve ser o atrito comum no Box2D, eu acho. e quanto à verificação dos limites de seus níveis, existem sensores. formas que avisarão quando algo passar por cima :)

Grimshaw
fonte
2
"porque não haverá força de gravidade, os objetos ficarão" mais leves "do que o normal, quando pressionados": Por quê? Sua massa não mudou apenas porque falta gravidade.
alxx
11
A massa deles não vai mudar. Mas a gravidade não mais os segurará no chão; portanto, quando não estiverem tocando uma superfície, eles serão mais fáceis de se mover.
AttackingHobo