Detección de presión táctil (fuerza) con rapidez (SpriteKit)

Entonces, tengo este juego con Swift en Xcode donde tengo un SKShapeNode que salta. Sin embargo, quisiera que este salto sea proporcional al toque del jugador. Por lo tanto, un pequeño toque obtendrá un pequeño salto y uno más rápido obtendrá un salto más alto. ¿Cómo es posible hacer esto (mente que no quiero ninguna opción de toque 3D)?

Por lo general, este tipo de cosas en los juegos se realiza mediante el cronometraje de la prensa y la alteración de la altura del salto en consecuencia. (Lo cual es también la razón por la que usar la física en los juegos de plataforms en 2D es complicado para este tipo de cosas).

La forma en que se hace en juegos como Super Mario es hacer que el inicio del movimiento de salto comience tan pronto como se presiona el toque. Luego, después de un cierto time (ya que el personaje está a la mitad "arriba" del salto), comtesting si el tacto todavía está hacia abajo. Si es así, puede hacer que la animation de salto continúe hacia arriba. Si se suelta el toque, comience a bajar nuevamente el salto.

De esta forma, un toque corto es un salto pequeño pero un toque más largo es un salto más alto.

Si tienes una smallJumpAction y bigJumpAction en este momento, lo que puedes hacer es bigJumpAction en partes más pequeñas …

beginJumpAction que se dispara inmediatamente y luego … smallJumpEndAction y bigJumpEndAction .

Esto podría hacerse con una secuencia de acción …

 let beginJumpAction = //move the player upwards slightly let smallJumpEndAction = //begin to move the player down let bigJumpEndAction = //move the player up a bit more and then move down let blockAction = SKAction.run { if touchStillDown { player.runAction(bigJumpEndAction) } else { player.runActgion(smallJumpEndAction) } } player.runAction(SKAction.sequence([beginJumpAction, blockAction]) 

Algo así de todos modos. Hay muchas maneras de abordar esto sin embargo 🙂