Il y a une chose qui m'a intrigué, et c'est comment mettre en œuvre un saut «faux-impulsé» dans un jeu de plateforme. Si vous ne savez pas de quoi je parle, pensez aux sauts de Mario, Kirby et Citation de Cave Story. Qu'est-ce qu'ils ont en commun? Eh bien, la hauteur de votre saut est déterminée par la durée pendant laquelle vous maintenez le bouton de saut enfoncé.
Sachant que les `` impulsions '' de ces personnages ne sont pas construites avant leur saut, comme dans la physique réelle, mais plutôt dans les airs - c'est-à-dire que vous pouvez très bien lever votre doigt à mi-hauteur de la hauteur maximale et il s'arrêtera, même si avec désaccélération entre elle et le point final; c'est pourquoi vous pouvez simplement taper pour un saut et le maintenir pour un saut en longueur -, je suis fasciné par la façon dont ils conservent leurs trajectoires sous forme d'arcs.
Mon implémentation actuelle fonctionne comme suit:
Lorsque le bouton de saut est enfoncé, la gravité est désactivée et la coordonnée Y de l'avatar est décrémentée de la valeur constante de la gravité. Par exemple, si les choses tombent à Z unités par tick, cela augmentera Z unités par tick.
Une fois que le bouton est relâché ou que la limite est atteinte, l'avatar désaccélère dans une quantité qui le ferait couvrir X unités jusqu'à ce que sa vitesse atteigne 0; une fois qu'il le fait, il accélère jusqu'à ce que sa vitesse corresponde à la gravité - fidèle à l'exemple, je pourrais dire qu'il accélère de 0 à Z unités / tick tout en couvrant X unités.
Cette implémentation, cependant, rend les sauts trop diagonaux, et à moins que la vitesse de l'avatar ne soit plus rapide que la gravité, ce qui le rendrait beaucoup trop rapide dans mon projet actuel (il se déplace à environ 4 pixels par tick et la gravité est de 10 pixels par tick, à un framerate de 40FPS), il le rend également plus vertical qu'horizontal. Ceux qui connaissent les jeux de plateforme remarqueront que le saut en arc du personnage leur permet presque toujours de sauter plus loin même s'ils ne sont pas aussi rapides que la gravité du jeu, et quand il ne le fait pas, s'il n'est pas bien joué, il se révélera être très contre-intuitif. Je le sais car je pourrais attester que ma mise en œuvre est très ennuyeuse.
Quelqu'un a-t-il déjà essayé des mécanismes similaires et peut-être même réussi? J'aimerais savoir ce qui se cache derrière ce genre de saut de plateforme. Si vous n'avez jamais eu d'expérience avec cela auparavant et que vous voulez l'essayer, alors s'il vous plaît, n'essayez pas de corriger ou d'améliorer ma mise en œuvre expliquée, sauf si j'étais sur la bonne voie - essayez de composer votre solution à partir de rayure. Je me fiche que vous utilisiez la gravité, la physique ou autre, tant que cela montre comment fonctionnent ces pseudo-impulsions, il fait le travail.
De plus, j'aimerais que sa présentation évite un codage spécifique à la langue; comme, en nous partageant un exemple C ++, ou Delphi ... Autant j'utilise le framework XNA pour mon projet et cela ne me dérangerait pas des trucs C #, je n'ai pas beaucoup de patience pour lire le code des autres, et je suis certains développeurs de jeux d'autres langues seraient intéressés par ce que nous réalisons ici, alors ne vous occupez pas de vous en tenir au pseudo-code.
Merci d'avance.