Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > Moteurs de jeux vidéo > XNA
XNA Forum d'entraide sur le développement avec XNA
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/01/2012, 00h20   #1
Aldwin974
Invité de passage
 
Inscription : janvier 2012
Messages : 2
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 2
Points : 0
Points : 0
Par défaut Saut avec paramétrage hauteur et impulsion

Bonjour à tous!

Je me suis lancé dans un projet assez ambitieux de conception d'un petit jeu de A à Z (du design à la musique en passant par le code) et je rencontre (assez rapidment, il faut l'avouer ) un premier obstacle.

C'est sans doute quelque chose d'assez simple à résoudre, mais étant game designer et pas coder, j'avoue m'arracher les cheveux.

Il s'agit donc d'un jeu 2D type "runner game" où le personnage avance tout seul et où le joueur peut sauter en appuyant sur un bouton (touche espace pour le mapping clavier). Pour l'instant, ce que j'ai fait ressemble à ça :

Code :
1
2
3
4
5
6
7
8
9
10
 
            if (isGrounded && ServiceHelper.Get<KeyBoardService>().IsKeyDown(Keys.Space))
            {
                speed.Y = -jumpImpulsion;
            }
 
            if (!isGrounded)
                speed.Y += gravity * deltaFrame;
 
            newPosition = Position + speed * deltaFrame;
Ca fonctionne pas mal : la gravité finissant par annuler l'impulsion donne un saut en cloche.

Mais voilà, j'aimerais pour des réglages futurs avoir plus de contrôles, notament sur une variable d'hauteur de saut tout en gardant une variable d'impulsion. En gros pouvoir rapidement donner une vitesse initiale au saut ainsi qu'une hauteur à atteindre et que celui-ci reste "smooth" (en cloche).

Je me suis battu avec pleins de solutions (notament des modifications de la position en fonction de fonctions sinus, cosinus etc...) mais rien de semble fonctionner donc je viens au-secours sur ce forum...

Merci d'avance de vos réponses!
Aldwin974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 07h36   #2
dark poulpo
Nouveau Membre du Club
 
Homme
médical
Inscription : septembre 2007
Messages : 129
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : médical

Informations forums :
Inscription : septembre 2007
Messages : 129
Points : 34
Points : 34
salut, pourquoi ne pas implémenter simplement la formule de lancer de poids ? comme ça tu aura une gravité, une masse, une direction et une force...
te restera juste à la modifier un peut pour faire en sorte que le gars reste sur le même X
dark poulpo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 08h31   #3
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 802
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 1 802
Points : 3 096
Points : 3 096
salut, en gros simplement:
si tu veux être précis alors:
  • le vecteur d'accélération A=P+A0 avec P le poids et A0 l'accélération du à autre chose (propulsion, etc...)
  • le vecteur vitesse V
  • le vecteur D donnant le déplacement pour un incrément de temps t

tu initialises:
D.x,D.y,D.z la position de départ
V.x,V.y,V.z la vitesse initiale
et pour chaque cycle:
  • tu mets à jour la position:
    • D.x=.5*A0.x*t*t+V.x*t+D.x
    • D.y=.5*A0.y*t*t+V.y*t+D.y
    • D.z=.5*(A0.z-m*g)*t*t+V.z*t+D.y
    PUIS la vitesse:
    • V.x=A0.x*t+V.x
    • V.y=A0.y*t+V.y
    • V.z=(A0.z-m*g)*t+V.z
avec m la masse...

si tu ne travailles pas directement en vecteur je te conseille de stocker t*t pour ne le calculer qu'une seule fois...

en espérant que ça t'éclaire...
__________________
soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h34.


 
 
 
 
Partenaires

Hébergement Web