Tout d'abord, XNA utilise également C #, donc c'est le même langage de programmation. Et bien que l'API sous-jacente puisse présenter certaines différences par rapport à DirectX, cela n'a rien à voir avec les sauts; les mêmes tutoriels ou réponses devraient donc s'appliquer ici. En outre, il existe de nombreuses façons de mettre en œuvre cela, en fonction de nombreux facteurs. Ce que je vais décrire ci-dessous n’est qu’une des possibilités.
Exigences physiques de base
Premièrement, vous avez besoin de variables physiques de base et de calculs sur votre boucle de mise à jour. En particulier, vous devez définir la position, la vitesse et la gravité, et votre boucle de mise à jour doit effectuer une opération similaire à celle-ci (détection de collision et réponse omises pour des raisons de simplicité):
float positionX, positionY; // Position of the character
float velocityX, velocityY; // Velocity of the character
float gravity = 0.5f; // How strong is gravity
void Update(float time)
{
positionX += velocityX * time; // Apply horizontal velocity to X position
positionY += velocityY * time; // Apply vertical velocity to X position
velocityY += gravity * time; // Apply gravity to vertical velocity
}
Saut à hauteur fixe
Maintenant, le moyen le plus simple d'implémenter un saut qui a toujours la même hauteur, peu importe le temps que vous appuyez sur la touche, consiste simplement à modifier la vitesse verticale une fois. Cela fera monter le personnage, tandis que la gravité prendra automatiquement soin de le faire tomber:
void OnJumpKeyPressed()
{
velocityY = -12.0f; // Give a vertical boost to the players velocity to start jump
}
Important Vous ne voulez pas pouvoir faire un saut si votre personnage n'est pas au sol, vous devrez donc cocher cette case.
Saut à hauteur variable
Mais des jeux comme Mario et Sonic ont un saut variable où la hauteur du saut dépend de la durée pendant laquelle vous appuyez sur le bouton. Dans ce cas, vous devrez manipuler et relâcher la touche de saut. Vous pouvez ajouter quelque chose comme:
void OnJumpKeyReleased()
{
if(velocityY < -6.0f) // If character is still ascending in the jump
velocityY = -6.0f; // Limit the speed of ascent
}
En ajustant toutes ces valeurs (c.-à-d. Les nombres tels que 0.5
, -12.0f
ou -6.0f
) dans le code ci-dessus, vous pouvez modifier la sensation de votre saut, à quelle hauteur il saute, combien il conserve son élan même après avoir relâché le bouton de saut, à quelle vitesse il tombe, etc. .
Important N'appelez pas ces fonctions à chaque image. Appelez-les une seule fois lorsque la touche est enfoncée ou relâchée. Sinon, votre personnage volera au lieu de sauter.
Exemple de travail
Je viens de créer un exemple rapide des techniques décrites ci-dessus, que vous pouvez essayer sur votre navigateur ici (appuyez sur le bouton de la souris pour sauter, relâchez-le à mi-chemin pour contrôler la hauteur du saut). C'est dans JS mais comme je l'ai mentionné plus tôt, le langage n'est pas pertinent dans ce cas.
http://jsfiddle.net/LyM87/