Necesitas dos booleanos, isColidingWithGroundyisJumping
Cuando el usuario presiona el botón de salto, si isColidingWithGroundes truey isJumpinges falso, entonces llame a lo jump()que se establece isJumpingentrue
Si la yvelocidad del jugador es positiva, entonces isJumpinges igualfalse
Si el jugador está colisionando con el suelo, entonces isColidingWithGround es igual true, de lo contrario isColidingWithGroundes igual false.
A veces, el jugador todavía está en contacto con el suelo después del impulso de salto inicial, y encuentro que al usar estas dos banderas, evita que se llame al salto () varias veces cuando se presiona el salto.