voila, j'ai un peu retoucher le switch dans le programme que tu m'avais envoyé.
jettes y un oeil
- Code: Tout sélectionner
// la vitesse de déplacement du sprite
int vitesse_sprite = 1;
/*Attendre l'appui d'une touche*/
while(SDL_WaitEvent(&event)){
switch (event.type){
case SDL_QUIT: //Lorsque l'on ferme la fenêtre
exit(0);
break;
case SDL_KEYDOWN:
// on ne dessine pas ici,
// ça ne sert qu'à récuperer les évenement et à agir en conséquence.
switch (event.key.keysym.sym){
case SDLK_ESCAPE:
exit(0);
break;
case SDLK_UP:
position_soldat1.y -= vitesse_sprite;
break;
case SDLK_DOWN:
position_soldat1.y += vitesse_sprite;
break;
case SDLK_LEFT:
position_soldat1.x -= vitesse_sprite;
break;
case SDLK_RIGHT:
position_soldat1.x += vitesse_sprite;
break;
case SDLK_PLUS: // la touche plus
case SDLK_KP_PLUS: // la touche plus du pavé numérique
vitesse_sprite++;
break;
case SDLK_MINUS: // la touche moins
case SDLK_KP_MINUS: // la touche moins du pavé numérique
vitesse_sprite--;
break;
}
break;
}
// on dessine le tout !!
// on commence par effacer la fenêtre.
SDL_FillRect(sfc_fenetre, NULL, 0);
// on y dessine le terrain
SDL_BlitSurface(sfc_terrain, NULL, sfc_fenetre, NULL);
// on y dessine le sprite
SDL_BlitSurface(sfc_soldat1, NULL, sfc_fenetre, &position_soldat1);
// si tu as d'autres choses à dessiner, tu le fait ici.
// on met à jour l'écran
SDL_UpdateRect(sfc_fenetre, 0, 0, 0, 0);
}
alors pour les remarques :
- Comme tu peux le voir, à chaque tour de boucle, on éfface tout ce qu'il y a à l'écran et on redessine tout !! Ce n'est pas mal c'est fait comme ça partout !
- évite de mélanger le code de mise à jour (dans le switch) avec le code d'affichage. d'ailleurs, je les ai séparés.
- essais au maximum de ne pas mettre de chiffre dans le code, mais seulement des variables ou des constantes (#define xxx 1), j'ai simplement remplacé ton ++ par une variable, et j'ai réussi facilement à ajouter de nouvelles possibilités ! d'ailleurs, au lieu d'écrire vitesse_sprite = 1, j'aurais du écrire vitesse_sprite = VITESSE; et un #define VITESSE 1 au début du fichier ou ailleurs.
- quand tu défini une chaine de caractères entre "", tu n'as pas besoin de mettre le \0 terminal, il est mis automatiquement par le compilateur : "Images/Icones/icone.bmp" ai lieu de "Images/Icones/icone.bmp\0" Attention, dans les autres cas, n'oublie pas de le mettre
- tu utilises la boucle d'évenements des premiers exemples du tutorial, elle marche mais à quelques inconvénients, en particulier si tu veux faire des animations !! A partir du tutorial 4 (le timer) j'explique une nouvelle façon de faire. Essais d'y passer, de toute façon, il faudra y passer un jour ou l'autre.
- n'oublie pas de vérifier la position de tes objets : quend tu déplace ton sprite, vérifie qu'il ne sors pas de l'écran, sinon ne le déplaces pas.. pareil pour le changement de vitesse avec + et - , je ne l'ai pas fait pour que ce soit plus simple à lire, mais il faudrait vérifier que la vitesse ne devienne pas négative et qu'elle ne dépasses pas une certaine limite (if (vitesse > 0) vitesse--; et if (vitesse < LIMITE) vitesse++; par exemple, fait pareil avec la position du sprite)
il y a d'autres petites remarques, mais si tu arrives à suivre ces primière, ça sera déà très bien
PS : désolé, j'ai un jour de retard sur la date promise
PS2 : y'a que yugiho qui a le droit de m'insulter !! toute tentative par une autre personne se verra riposter violamment