Bonsoir à tous !
Voilà, j'ai un petit probleme en C et SDL.
En effet, j'ai creer une liste chainée où mes noeuds sont composés d'une information couleur (R,V,B) (valeur entiere).
J'aimerai utiliser la SDL pour afficher mes noeuds et donc les couleurs de chacun d'entres eux.
J'ai utilisé la fonction SDL_FillRect en l'inscrustant dans une fonction spécialement dédiée.
Avec le code ci-dessous mes trois noeuds s'affichent bien mais ne restent pas à l'écran, le bleu arrive puis disparait tres vite, le blanc arrive et puis le rouge. En gros ca fait un effet clignotant. J'aimerai que mes trois noeuds s'affichent en même temps et ne disparaissent pas.
Voici ma fonction:
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 void afficheNoeudListeCoul(noeud *pListe) { noeud *pTemp; SDL_Surface *rectangle = NULL, *screen = NULL; SDL_Rect position; Uint8 video_bpp = 0; Uint32 videoflags = SDL_SWSURFACE; screen=SDL_SetVideoMode(300,30, video_bpp, videoflags); SDL_WM_SetCaption("Listes", NULL); rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 20, 20, 32, 0, 0, 0, 0); position.x=100; position.y=5; pTemp = pListe; while(pTemp) { position.x = position.x + 20; SDL_FillRect(rectangle, NULL, SDL_MapRGB(screen->format,pTemp->coul.R,pTemp->coul.V, pTemp->coul.B)); SDL_BlitSurface(rectangle, NULL, screen, &position); SDL_Flip(screen); pTemp = pTemp->pSuivant; afficheNoeudListeCoul(pTemp); } SDL_Flip(screen); SDL_FreeSurface(rectangle); }
Et voici mon main :
Je sais, il y a pas mal de ligne pour un post mais je ne voudrai rien louper.
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 int main(int argc, char *argv[]) { SDL_Surface *rectangle = NULL, *screen = NULL; Uint32 initflags = SDL_INIT_VIDEO; /* See documentation for details */ Uint8 video_bpp = 0; Uint32 videoflags = SDL_SWSURFACE; int done; SDL_Event event; noeud * pListe = NULL; /* -----------------------CREATION DE LA PLISTE ---------------------------------*/ /* creation du premier noeud */ if((pListe = creerNoeudListe(0,0,255,"bleu")) == NULL) return(0); /* creation du deuxieme noeud */ if((pListe->pSuivant = creerNoeudListe(255,255,255,"blanc")) == NULL) { detruireNoeudListe(&pListe); return(0); } /* creation du troisieme noeud */ if((pListe->pSuivant->pSuivant = creerNoeudListe(255,0,0,"rouge")) == NULL) { detruireNoeudListe(&pListe); return(0); } screen=SDL_SetVideoMode(640,480, video_bpp, videoflags); if (screen == NULL) { fprintf(stderr, "Couldn't set 640x480x%d video mode: %s\n", video_bpp, SDL_GetError()); SDL_Quit(); exit(2); } if ( SDL_Init(initflags) < 0 ) { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); exit(1); } afficheNoeudListeCoul(pListe); done = 0; while ( !done ) { /* Check for events */ while ( SDL_PollEvent(&event) ) { switch (event.type) { case SDL_MOUSEMOTION: break; case SDL_MOUSEBUTTONDOWN: break; case SDL_KEYDOWN: /* Any keypress quits the app... */ case SDL_QUIT: done = 1; break; default: break; } } } SDL_Quit(); return(0); }
Auriez-vous une idée ou voir même une solution ?
Merci pour votre aide !![]()
Partager