Implementando corretamente um “salto duplo”

23

Estou trabalhando em um jogo para iPhone 2D usando Corona (versão de teste, portanto não posso usar seus fóruns). O jogo envolve o personagem caindo no céu, e eu estou tentando implementar um "salto duplo" para o personagem, para que ele seja capaz de pular enquanto cai. Estou usando a biblioteca de física de Corona para que o personagem caia, e até agora o melhor método para fazê-lo pular é usar o método de impulso vertical

object:applyLinearImpulse(0, -0.4, object.x, object.y)

O problema que enfrento é que, quando o personagem está apenas começando (a velocidade vertical é baixa), ele pula muito alto e, quando cai há algum tempo (a velocidade vertical é alta), o salto é insignificante. Eu estou supondo que a melhor solução é usar algum tipo de equação com a velocidade como entrada para fazer o salto o mesmo, independentemente da velocidade, mas não consigo descobrir qual seria essa equação.

Ok, então esse é o meu pensamento. A questão final é: como exatamente você implementa um salto duplo com a física? Existe uma equação adequada para o meu problema? Devo adotar uma abordagem diferente? Isso já foi feito antes em jogos como Smash Bros, então existe uma solução repetível, certo?

Jesse J
fonte

Respostas:

37

Apenas defina a velocidade vertical como zero e chame o mesmo código que você usa para fazer o primeiro salto.

Adam Harte
fonte
4
Oh. Isso ... realmente funciona muito bem. E tão simples que agora me sinto tola por não pensar nisso. Ah bem. Obrigado!
Jesse J
5
É muitas vezes tentador para tornar as coisas mais complicadas do que eles precisam ser :)
Adam Harte
2
resposta elegante!
Lathomas64 20/05
1

Não tenho certeza, mas acho que jogos como o UT2K4 podem usar lógica como esta:
if (já saltou &&! Dobrou já saltou & &!! Touch ground && velocity.up é aproximadamente 0,0f) DoDoubleJump ();

Onde está o seu componente y ou z (Dependendo de qual deles está ativo)
Isso significa que seu jogador só pode fazer um salto duplo quando estiver na altura máxima do primeiro salto e estiver prestes a começar a descer novamente.
Eu gosto desse método porque ele cria um pouco de habilidade (você precisa cronometrar para que aconteça dentro de "velocity.up é de aproximadamente 0,0f").
Dependendo do que você deseja, você pode direcionar "aproximadamente 0,0f" para números positivos, para que eles possam dar um salto duplo apenas quando ainda estiverem subindo, por exemplo.

Chris
fonte