Bonjour je débute et je ne voix pas encore comment faire pour que le personnage principal puisse sauter.
Est ce que l'ont peut sauter et en même temps se déplacer sur la droite ou sur la gauche pendant le saut ?
Merci pour vos réponses.
Bonjour je débute et je ne voix pas encore comment faire pour que le personnage principal puisse sauter.
Est ce que l'ont peut sauter et en même temps se déplacer sur la droite ou sur la gauche pendant le saut ?
Merci pour vos réponses.
Ben pour le faire sauter tu changes sa position. Tu peux utiliser une interpolation pour changer la hauteur.
Ensuite pouvoir aller a gauche ou a droite durant le saut, ça c'est a toi de décider. Est ce que tu veux que le joueur puisse faire ça?
Comme le dit dFrancis750 il suffit de changer la position x et y sur pression de touche..
Un moyen plus sophistiqué c'est de faire afficher le personnage avec une trajectoire d'arc de cercle ou mieux d'hyperbole...
L'équation d'un arcle de cercle c'est basiquement
attention en C les angles sont en radians il faut les convertir en degrés
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 pour angle=0 jusuqu'à angle=angle_arc_cercle x'=x+distance_deplacement * ( cos (angle) ) y'=y+distance_deplacement * ( sin (angle) ) fin pour
Faut rajouter l'interpolation sinon le saut ne se fera pas a la meme vitesse sur toutes les machines.
Ensuite je pense que y a des moyens d'eviter un cosinus et un sinus qui bouffe de la ressource mais si tu debutes je pense que tu t'en moque.
Ce que je ferais c'est utiliser l'arc de cercle seulement sur les ordonnées et d'utiliser la vitesse du personnage pour defnir son deplacement sur les abscisses. Ca evitera un changement de vitesse du personnage (il va vite en marchant et ralentit en sautant ou inversement) ou de chercher quel bonne vitesse faut lui donner pour etre raccord.
J'espere que je suis clair et que ca t'aidera.
enfaite mon delire c'est de programmer le saut dans le même style que mario
Voila mon code boucle principal pour le moment :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 while(continuer != 0){ etat = fenetre.evenement(&continuer, &sauter); fenetre.actualiser(); sauter = mario->Annimer(etat, sauter); SDL_Flip(ptr_ecran); }
- Etat me permet de savoir quel touche a été appuyer
- Sauter me permet de voir si je suis entrein d'effectuer mon saut
Voici mon code qui me permet de savoir quel touches ont été appuyer :
voici le code qui me permet d'animer mon personnage:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 int Fenetre::evenement(int *continuer, int *saut) { SDL_PollEvent(&event); switch(event.type) { case SDL_QUIT: *continuer = 0; break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_RIGHT: // Flèche droite etat = 2; break; case SDLK_LEFT: // Flèche gauche etat = 1; break; } break; case SDL_KEYUP: switch(event.key.keysym.sym) { case SDLK_RIGHT: // Flèche haut etat = 0; break; case SDLK_LEFT: // Flèche haut etat = 0; break; case SDLK_UP: *saut = 1; break; } break; } return(etat); }
je sais pas si ma logique est bonne ou faut que je change je parle au niveau du saut, mais si quelque chose ne vous parait pas normale dans ce code n'hésitez pas à me le dire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 int Personnage::Annimer(int etat,int saut) { /* ici nous recuperons le temps pour les futures annimations du personnage */ temps_actuel = SDL_GetTicks(); sauter = saut; // on recupere l'etat du saut pour un future traitement /* si ont a appuyer sur le bouton "haut" alors l'etat de la variable sauter passe a 1 on fait bouger le personnage jusqu'en haut de l'ecran de pixel en pixel. si le personnage atteind le plafond de l'ecran alors j'attribu a l'etat de la variable sauter "0". si l'on ne saute pas je creer un effet de gravité constante en faisant descendre mon perso jusqu'a ce que la position du personnage atteigne 280 px */ if(sauter == 1){ position_personnage.y--; if(position_personnage.y ==0) sauter = 0; } else{ if(position_personnage.y <= 280) position_personnage.y++; } /* si aucune touche n'est appuyer on afiche le sprite du personnage au repos correspondant a sa direction */ if(etat == 0){ if(direction == 1) SDL_BlitSurface(personnage[8], NULL, ecran_copy, &position_personnage); if(direction == 2) SDL_BlitSurface(personnage[0], NULL, ecran_copy, &position_personnage); } /* si le bouton gauche est appuyer nous attribuons sa direction ont affiche l'annimation du personnage puis ont le fait s'avancer vers la gauche */ if(etat == 1){ direction = 1; if((temps_actuel - temps_precedent) > 30){ if(numero_annim == 15) numero_annim = 8; else if(numero_annim > 15) numero_annim = 8; else numero_annim++; SDL_BlitSurface(personnage[numero_annim], NULL, ecran_copy, &position_personnage); temps_precedent = temps_actuel; } position_personnage.x--; SDL_BlitSurface(personnage[numero_annim], NULL, ecran_copy, &position_personnage); } /* si le bouton droite est appuyer nous attribuons sa direction ont affiche l'annimation du personnage puis ont le fait s'avancer vers la droite */ if(etat == 2){ direction = 2; if((temps_actuel - temps_precedent) > 30){ if(numero_annim == 7) numero_annim = 0; else if(numero_annim > 7) numero_annim = 0; else numero_annim++; SDL_BlitSurface(personnage[numero_annim], NULL, ecran_copy, &position_personnage); temps_precedent = temps_actuel; } position_personnage.x++; SDL_BlitSurface(personnage[numero_annim], NULL, ecran_copy, &position_personnage); } /* retourne l'etat du saut pour un prochain traitement */ return(sauter); }
Merci pour l'aide apporter les mec.
Pour gérer le sauts on utilise souvent les lois de la physique, avec la gravité. Surtout qu'une fois le modèle physique en place, faire un saut est très facile à réaliser, il suffit d'assigner une valeur négative au vecteur vitesse y et de laisser le moteur tourner.
Tente des recherche sur google avec "2D game physic", tu devrais trouver des résultats.
Je viens de mettre la main sur un tuto qui ma l'air pas mal, ils y abordent le saut: http://www.geocities.com/SiliconVall...49/physics.htm
Par contre ce qui peut-être gênant dans ton code c'est les y-- ou x++, il vaut mieux assigner une vitesse a ton bonhomme, et le faire bouger en fonction du temps (et non en fonction de la rapidité de ton PC).
Bon c'est vrai que quand on débute, ça fait beaucoup de chose à la fois ! Mais le jeu en vaut la chandelle![]()
Merci pour ton aide Polyfructol .
Je vais voir par rapport à ce que tu m'a dit au niveau des vecteurs et de la vitesse pour gérer les déplacements du personnage.
Je te fais savoir si j'ai réussis à passer cette phase très difficile pour un débutant de ma sorte.
Tu devrais mettre des enum pour t'es etats. Et dans ta fonction Animer y a moyen de factoriser le code aussi.
Ensuite ce qu'a proposé Polyfructol ca s'appelle la kinematic si je ne me trompe pas. Ca consiste a appliquer la loi de la gravité sans prendre en compte aucune autre force.
En gros l'equation c'est ca:
Positiony=Position0y+vitesse*temp
avec :
vitesse= vitesse0- 9.81*temp
Toi tu dois definir vitesse0. Donc en gros quand tu veux sauter, tu passe vitesse0 a une valeur qui va bien pour faire un jolie saut.
Perso je ferais plutot une interpolation plutot que d'appliquer de la physique.
Et Polyfructol a raison pour le coup des ++ et --. Ca definit la vitesse d'animation en fonction de la vitesse d'execution et pas en fonction du temp ce qui fait que sur un pc rapide les anim seront rapide et elles seront lentes sur un pc lent.
Les equations je les ai ecrites de memoires donc c'est possible qu'elles soient fausses.
Pour les mouvements, plutôt que d'utiliser tes ++, jettes un oeil sur ces tutos :
http://loka.developpez.com/tutoriel/...uvements/#LX-2
http://loka.developpez.com/tutoriel/...mation/#LXII-D
- FAQ Jeux - FAQ SDL - FAQ DirectX - FAQ OpenGL - FAQ 3D
- Tutoriels Jeux - Outils
- Mes tutos : http://loka.developpez.com - tuto sdl
Partager