salut les amis je cherche des sprites pour un joueur qui lance un disque qu'il soit mario ou sonic ou autre
aussi un tuto qui explique comment faire des animation pour montrer le joueur lancer un disque a partir des photo disponible
et merci
salut les amis je cherche des sprites pour un joueur qui lance un disque qu'il soit mario ou sonic ou autre
aussi un tuto qui explique comment faire des animation pour montrer le joueur lancer un disque a partir des photo disponible
et merci
Salut,
Pour les ressources voir ici http://jeux.developpez.com/medias/
En ce qui concerne les animations, tu sais peut etre deja que SDL le gere pas, il te faudra une bibliotheque / framework comme SGE (http://www.digitalfanatics.org/cal/sge/index.html) de plus haut niveau, ou implémenter toi même les structures qui vont bien.
Classiquement, une animation n'est que des coordonnées prédéfinies avec un timer entre chaque frames (rectangle source)
j'utilise les structures suivantes
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 typedef struct t_animation { int id; ///identify a animation (with a number or an enum) int frame_delay; ///time in sec before switch to next frame int frame_trigger; ///count the remaining time before the next frame, must be init at 0 int frame_current; ///number of the current frame in the animation int frame_default; ///the default frame, when the animation start or end int frame_nb; ///number of frames in the animation bool have_loop; ///does the animation has loop SDL_Rect *v_frame; ///rect of each frames }animation; /** @struct t_anim_sprite @brief A sprite with animations, it got a pointer to a simple sprite, and informations needeed to animate it. the sprite'simage is the charset, and width and height are divded by the number of animations. Remember that t_anim_sprite must be manipulated with anim_sprite functions. @param p_sprite : regular sprite @param v_anim : array of animations @param animation_nb : number of animations @param animation_current : current animation @param number of frames in the charset on x @param number of frames in the charset on y */ typedef struct t_anim_sprite { int x,y; SDL_Rect bounding_box; SDL_Rect offset; image *p_image; animation *v_anim; int animation_nb; int animation_current; int frame_nb_x; int frame_nb_y; int tile_height; int tile_width; bool have_loop; //if false, free the animation after the first loop bool is_paused; }anim_sprite;
merci mnt j'ai fait ce code mais je le trouve pas bien structurer pouvez vous m'aider à ce point
voilà le resultat de ce code
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102 /* main.c ------ Par youssef, pour Le Projet de programmation Rôle : */ #include <stdlib.h> #include <stdio.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #define TAILLE_BLOC 44 // Taille d'un bloc (carré) en pixels #define NB_BLOCS_LARGEUR 24 #define NB_BLOCS_HAUTEUR 8 #define LARGEUR_FENETRE TAILLE_BLOC * NB_BLOCS_LARGEUR #define HAUTEUR_FENETRE TAILLE_BLOC * NB_BLOCS_HAUTEUR #include "constantes.h" int main(int argc, char *argv[]) { SDL_Surface *ecran = NULL, *menu = NULL; SDL_Surface *sol ; SDL_Rect position_sol; SDL_Event event; int continuer = 1,i,j; SDL_Init(SDL_INIT_VIDEO); SDL_WM_SetIcon(IMG_Load("caisse.jpg"), NULL); // L'icône doit être chargée avant SDL_SetVideoMode ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); SDL_WM_SetCaption("Lancer", NULL); // Effacement de l'écran SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 57, 124, 198)); while (continuer) { SDL_WaitEvent(&event); switch(event.type) { case SDL_QUIT: continuer = 0; break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_ESCAPE: // Veut arrêter le jeu continuer = 0; break; case SDLK_1: // Demande à jouer continuer = 0; break; case SDLK_2: // Demande l'éditeur de niveaux continuer = 0; break; } break; } for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++) { for (j = 7 ; j < NB_BLOCS_HAUTEUR ; j++) { position_sol.x = i * TAILLE_BLOC; position_sol.y = j * TAILLE_BLOC; if(i==2 || i==5 || i==8 || i==11 ) sol = IMG_Load("niveau.jpg"); else if(i==20) sol = IMG_Load("niveau.jpg"); else sol = IMG_Load("Bricks.gif"); SDL_BlitSurface(sol, NULL, ecran, &position_sol); SDL_Flip(ecran); } } position_sol.x = 11 * TAILLE_BLOC; position_sol.y = 6 * TAILLE_BLOC; sol = IMG_Load("mario.gif"); SDL_BlitSurface(sol, NULL, ecran, &position_sol); SDL_Flip(ecran); } SDL_FreeSurface(menu); SDL_Quit(); return EXIT_SUCCESS; }
aussi une autre chose comment faire pour ecrire de la meme façon que la photo ci_dessus (mario, world, time) et si le savez la couleur exact du ciel (x,x,x):
Quelle font police utilise t on ds les jeu de mario comme dans la photo ci_dessus
Bonjour,
Je pense que pour les écritures, il faut utiliser SDL_TTF, en utilisant un fichier de police correspondant à cette police. Cela peut se trouver assez facilement avec google .
Par rapport au code, il semble que dans la boucle while, vous charger à chaque fois votre niveau.
L'appel à IMG_Load() doit être fait qu'une seule fois par fichier à chargé. Sinon, cela va remplir la mémoire indéfiniment ... et freezer le système.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 if(i==2 || i==5 || i==8 || i==11 ) sol = IMG_Load("niveau.jpg"); else if(i==20) sol = IMG_Load("niveau.jpg"); else sol = IMG_Load("Bricks.gif");
De plus, pour les SDL_Surface, vous devez en avoir une par IMG_Load, du coup.
Et ça fera déjà mieux.
Et du coup, on peut faire une deuxième fonction, spéciale pour le chargement.
Que l'on pourra aussi mettre dans un autre fichier, pour vraiment eclaircir le main.c
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager