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?
Respostas:
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.fonte
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.
fonte
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.
fonte
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.
fonte