Implémenter correctement un «double saut»

23

Je travaille sur un jeu iPhone 2D en utilisant Corona (version d'essai, donc je ne peux pas utiliser leurs forums). Le jeu implique le personnage tombant dans le ciel, et j'essaie de mettre en place un "double saut" pour le personnage, pour qu'il puisse sauter en tombant. J'utilise la bibliothèque de physique de Corona pour faire tomber le personnage, et jusqu'à présent, la meilleure méthode pour le faire sauter est d'utiliser la méthode de l'impulsion verticale

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

Le problème auquel je suis confronté est que lorsque le personnage commence à peine (la vitesse verticale est faible), il saute très haut et quand il tombe depuis un certain temps (la vitesse verticale est élevée), le saut est négligeable. Je suppose que la meilleure solution est d'utiliser une sorte d'équation avec la vitesse en entrée pour rendre le saut identique quelle que soit la vitesse, mais je ne peux pas comprendre quelle serait cette équation.

D'accord, c'est donc toutes mes pensées. La question finale est, comment implémentez-vous exactement un double saut avec la physique? Y a-t-il une équation appropriée pour mon problème? Dois-je adopter une approche différente? Cela a déjà été fait dans des jeux comme Smash Bros, donc il y a une solution reproductible, non?

Jesse J
la source

Réponses:

37

Réglez simplement la vitesse verticale sur zéro et appelez simplement le même code que vous utilisez pour effectuer le premier saut.

Adam Harte
la source
4
Oh. Cela ... fonctionne plutôt bien. Et si simple que je me sens maintenant stupide de ne pas y avoir pensé. Tant pis. Merci!
Jesse J
5
Il est souvent tentant de rendre les choses plus compliquées que nécessaire :)
Adam Harte
2
réponse élégante!
lathomas64
1

Je ne suis pas sûr, mais je pense que des jeux comme UT2K4 pourraient utiliser une logique comme celle-ci:
si (déjà sauté &&! Doublé sauté encore &&! Toucher le sol && velocity.up est d'environ 0,0f) DoDoubleJump ();

Où se trouve votre composant y ou z (selon celui qui est en place)
Cela signifie que votre joueur ne peut faire un double saut que lorsqu'il est à la hauteur maximale de son premier saut et qu'il est sur le point de commencer à redescendre.
J'aime cette méthode car elle crée un peu de compétence (vous devez la chronométrer pour qu'elle se produise à l'intérieur de "velocity.up est d'environ 0,0f").
Selon ce que vous voulez, vous pouvez biaiser "environ 0,0f" vers des nombres positifs afin qu'ils ne puissent que doubler lorsqu'ils montent encore par exemple.

Chris
la source