Fazendo uma bola Box2D pular para uma altura constante

8

Quero criar um jogo como o Doodle Jump. Estou usando libgdx e Box2d. Preciso de conselhos sobre como fazer minha bola saltar constantemente e com a mesma altura.

Eu tentei definir a restituição do corpo da bola como 1 para que ela possa pular constantemente, mas quando pulo em um bloco, o "impulso" é menor. Também tentei detectar a colisão e aplicar um impulso, mas também não funcionou.

Como posso fazer a bola saltar sempre à mesma altura?

Ion Farima
fonte
6
Você pode considerar lançar sua própria "física" em vez de usar o box2d. Um jogo como o doodle jump não exigiria muito trabalho para ser realizado sem um mecanismo de física.
jgallant

Respostas:

15

insira a descrição da imagem aqui

Quando a bola (curva de trajetória vermelha) atinge um bloco mais alto (retângulo azul), ela se move mais lentamente do que quando atinge um bloco mais baixo (retângulo verde). Por isso, ele não salta mais alto do que de onde veio.

Fisicamente, isso faz sentido.

O Doodle Jump obviamente não é fisicamente preciso. Se você deseja um efeito como no Doodle Jump, onde o impulso de uma colisão é sempre o mesmo, você deve definir a velocidade vertical com algum valor sempre que ocorrer uma colisão, com ball.speed.y = 7;ou similar.

Anko
fonte
2

Os mundos do Box2D usam amortecimento e atrito, considere que o mundo pode estar aplicando um amortecimento aos seus objetos à medida que são simulados.

Evan
fonte
1

Eu também gostaria de mostrar que talvez não seja necessário usar um mecanismo de física para isso. Dependendo de como as colisões do seu jogo são tratadas (especificamente, a resposta à colisão), você pode descobrir que pode criar um sistema de caixa delimitadora de maneira muito simples sobre o qual você tem controle total. De fato, nos jogos no estilo "doodle jump" é ainda mais fácil. Em vez de se preocupar em detectar colisões no box2d e determinar se a colisão deve ser desabilitada ou não (por exemplo, você atinge uma plataforma por baixo), o cenário de salto com salto é realmente muito mais simples. Se sua bola estiver "descendo" (y está diminuindo) e passar o valor de y de uma plataforma, e estiver dentro dos limites esquerdo / direito de uma plataforma, ela colidirá. A única coisa realmente "complexa" é a rota de voo parabólica que você seguiria,http://en.wikipedia.org/wiki/Parabola#Equation_in_Cartesian_coordinates ).

Colisões com outros itens no mundo que não exigem resposta (por exemplo, obter um bônus) podem ser facilmente resolvidas com apenas caixas delimitadoras.

O Box2D é fenomenal, mas geralmente é um exagero se você tiver requisitos simples. IMO.

Jason
fonte
0

Lembre-se (valor de flutuação = velocidade.y) da velocidade da bola antes de colidir com a plataforma e defina após o salto: ball.velocity.y = valor * (-1)

Talvez você seja interessante olhar para este post:
primeiro post
segundo post

PS Não consigo enviar o código aqui, por favor, procure no "primeiro post" no último comentário. Há código como eu resolvi um problema semelhante.

Guaxinim
fonte