Implementar correctamente un "doble salto"

23

Estoy trabajando en un juego de iPhone 2D con Corona (versión de prueba, así que no puedo usar sus foros). El juego involucra al personaje que cae por el cielo, y estoy tratando de implementar un "doble salto" para que el personaje pueda saltar mientras cae. Estoy usando la biblioteca de física de Corona para que el personaje caiga, y hasta ahora el mejor método para que salte es usar el método de impulso vertical.

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

El problema que enfrento es que cuando el personaje recién comienza (la velocidad vertical es baja), salta muy alto, y cuando ha estado cayendo durante un tiempo (la velocidad vertical es alta), el salto es insignificante. Supongo que la mejor solución es usar algún tipo de ecuación con la velocidad como entrada para hacer que el salto sea el mismo independientemente de la velocidad, pero no puedo entender cuál sería esa ecuación.

Bien, eso es todo lo que pienso. La pregunta final es, ¿cómo se implementa exactamente un doble salto con la física? ¿Hay una ecuación adecuada para mi problema? ¿Debo tomar un enfoque diferente? Se ha hecho antes en juegos como Smash Bros, por lo que hay una solución repetible, ¿verdad?

Jesse J
fuente

Respuestas:

37

Simplemente establezca la velocidad vertical en cero, y simplemente llame al mismo código que usa para hacer el primer salto.

Adam Harte
fuente
44
Oh. Eso ... en realidad funciona bastante bien. Y tan simple que ahora me siento tonto por no pensar en ello. Oh bien. ¡Gracias!
Jesse J
55
A menudo es tentador hacer las cosas más complicadas de lo necesario :)
Adam Harte
2
respuesta elegante!
lathomas64
1

No estoy seguro, pero creo que juegos como UT2K4 podrían usar una lógica como esta:
if (ya saltó &&! Duplicó saltó todavía &&! Tocar tierra && velocity.up es aproximadamente 0.0f) DoDoubleJump ();

Dónde está tu componente y o z (dependiendo de cuál esté arriba)
Esto significa que tu jugador solo puede hacer un salto doble cuando está a la altura máxima de su primer salto y está a punto de comenzar a bajar nuevamente.
Me gusta este método porque crea un poco de habilidad (tienes que cronometrarlo para que ocurra dentro de "velocity.up es aproximadamente 0.0f").
Dependiendo de lo que desee, puede sesgar "aproximadamente 0.0f" hacia números positivos para que solo puedan saltar dos veces cuando todavía se mueven hacia arriba, por ejemplo.

Chris
fuente