Je suis en train de créer un jeu en C # avec Direct X 9.0. Le remake du jeu est Donkey Kong NES. J'ai presque tout terminé, mais j'ai des problèmes avec la physique du saut de Mario. J'ai des variables déclarées pour les coordonnées Y et X.
Je me demandais s'il existait une méthode simple pour le faire. J'ai cherché haut et bas une réponse, mais les réponses que j'ai trouvées ne sont pas pertinentes / ou utilisent un langage de programmation différent tel que XNA.
J'ai actuellement une variable bool définie pour vérifier si W a été pressé, cela déclenchera le code pour le faire sauter. Je déconne comme.
if (jump == true)
{
Playerypos -= vel;
Playerxpos += vel;
}
Ce qui n'a pas bien fonctionné. J'ai cherché haut et bas une réponse et maintenant je suis désespéré, si quelqu'un pouvait me diriger dans la bonne direction vers une solution simple. Ce serait génial. Très apprécié pour toutes les réponses.
Réponses:
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é):
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:
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:
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/
la source
Comme en physique. Seulement au moment où vous appuyez
jump key
et que le personnage est au sol, augmentez sa vitesse (il s’appelle impulsion), mais faites-le tomber tout le temps par gravité.Si vous ne voulez pas que le personnage saute à chaque fois qu'il touche le sol - parce que vous êtes en train de le tenir
jump key
- ajoutez unejump key is being pressed
variable que vous effacez aprèsjump key
est relâchée et définie après. Pseudocode:Si j'ai utilisé votre façon:
Comment
donkey.y
va changer est à votre imagination. Velocity devrait être plus petit. Un âne plus haut est dans l'air pour le rendre beau.la source