J'ai réussi à faire sauter mon personnage mais...pour le faire monter je suis obligé de laisser la touche appuyée jusqu'à ce qu'il atteigne la limite que je lui ai autorisé.
Ce que j'aurais voulu c'est d'appuyer une fois sur la touche et le personnage monte tout seul.
J'avais pensé au getTicks mais je l'utilise déjà pour la descente.
Comment faire?
SDL_PollEvent(&evenement); // Récupération de l'évènement dans evenement switch(evenement.type)// Test du type d'évènement { case SDL_QUIT: // Si c'est un évènement de type "Quitter"
continuer = 0; break;
case SDL_KEYDOWN: // Si appui d'une touche switch(evenement.key.keysym.sym) {
Pourquoi ?
Car
1 . Tu n'indente rien de la même manière (arrives-tu à t'y retrouver?? )
2 . Tu fais deux fois un switch (switch(evenement.type)). Quelle utilité? (surtout si tu mets deux fois "case SDL_QUIT:").
3 . Ton algorithme est faut. Recommence sur une feuille. (Quand on appuis sur la touche "saut", tu ne fais pas sauter les perso, mais tu le téléporte!)
case SDL_KEYUP: // relache d'une touche switch(evenement.key.keysym.sym) { case SDLK_UP:
saut = false; if(positionPersonnage.y == 512)// CA SIGNIFIE QUOI? {
saut = true; break; } }//FIN DU IF // NON CA C'EST LA FIN DU SWITCH. break; }
Une méthode est de considérer, pour ton perso, une vitesse : vx et vy.
A chaque seconde, typiquement, la position x subit x+=vx, et y+=vy
vx et vy peuvent etre négatifs pour un déplacement a gauche, a droite, en haut ou en bas.
Lachons le mot : c'est un vecteur vitesse.
A partir de la, quand tu sautes, tu modifies vy d'un coup : c'est l'impulsion du saut.
Ainsi, l'impulsion n'est donnée qu'une fois : le reste du temps, le sprite subit une évolution normale.
A chaque nouvelle image, tu calcules, en fonction du temps passé, l'évolution du vecteur vitesse, dans un champ de pensateur : la chute libre.
Regarde mon tuto (cf ma carte) §2.B.1 pour voir un exemple sur la chute libre.
C'est bon j'ai réussi à faire.
ce n'est peut être pas la bonne méthode mais le résultat me convient parfaitement.Je le met quand même si ça peut aider de futurs programmeurs en détresse
je vous remercie à tous les deux!
Hiura je tiendrais compte de tes remarques concernant mon code "brouillon" , je rectifierais sous peu.
Fvirtman je note ton site, merci
case SDL_KEYUP: // relache d'une touche switch(evenement.key.keysym.sym) { case SDLK_UP: break; }
// On teste si le joueur effectue un saut if( saut ) { // on fait bouger le joueur selon le décalage
positionPersonnage.y -= decalage;
// On teste si le joueur a retouché le sol if(positionPersonnage.y >= 512) {
positionPersonnage.y = 512;
// on arrête le saut
saut = 0; }
// on fait ralentir la montée, voire accélérer la descente
decalage -= 1;
}
sauter personnage
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html