SDL2 Les pointeurs
Résolu
poparnassus
Messages postés
426
Date d'inscription
Statut
Membre
Dernière intervention
-
poparnassus Messages postés 426 Date d'inscription Statut Membre Dernière intervention -
poparnassus Messages postés 426 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Bon je galere grave avec c'est pointeur, franchement j'aimerai bien que quelqun m'explique pourquoi ca marche pas.
j'ai tout le temps ce warning.
warning: unused variable 'rectangleB' [-Wunused-variable]|
ma structure: fonction.h
ma fonction ; fonction.c
Quand je n'utilise pas les pointeur, ca marche j'ai mes coulours et carrés qui se dessine, comme ca:
Bon je galere grave avec c'est pointeur, franchement j'aimerai bien que quelqun m'explique pourquoi ca marche pas.
j'ai tout le temps ce warning.
warning: unused variable 'rectangleB' [-Wunused-variable]|
ma structure: fonction.h
//Pointeur SDL_Window *screen; SDL_Renderer *renderer; //Structure qui gere l'affichage des images. typedef struct Affichage Affichage; struct Affichage { //Fenetre int WIDTH, HEIGHT; int rax ; int ray ; int raw; int rah ; SDL_Texture *ArrierePlan; SDL_Rect *rectangle1; SDL_Rect *rectangleA; SDL_Rect *rectangleB; SDL_Rect *rectangleX; SDL_Rect *rectangleY; };
ma fonction ; fonction.c
void ArrierePlan(char *titre,Affichage *affichage) { affichage->ArrierePlan = NULL; //affichage->Texture = NULL; //Creation de la fenetre screen = SDL_CreateWindow(titre,SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,WINDOW_W,WINDOW_H,SDL_WINDOW_SHOWN); //Creation du renderer renderer = SDL_CreateRenderer(screen,-1,SDL_RENDERER_ACCELERATED); if (screen == NULL || renderer == NULL) { printf("Impossible d'initialiser le mode ecran %s ,\n", SDL_GetError()); } SDL_SetRenderDrawColor(renderer, 255, 0, 0, 0); SDL_RenderClear(renderer); //chargement de l'image de fond //affichage->ArrierePlan = SDL_LoadBMP("6wd.bmp"); //SDL_CreateTextureFromSurface(renderer, affichage->ArrierePlan); int r1w =WINDOW_W , r1h = WINDOW_H/4; SDL_Rect *rectangle1 ; affichage->rectangle1->x = 20; affichage->rectangle1->y = 20; affichage->rectangle1->w = r1w - (rectangle1->x*2); affichage->rectangle1->h = r1h - (rectangle1->y*2); SDL_SetRenderDrawColor(renderer,255,255,255,255); // blanc SDL_RenderFillRect(renderer, affichage->rectangle1); affichage->rax = (rectangle1->x)+((rectangle1->w/2)-(((rectangle1->h) - (rectangle1->x))/2)), affichage->ray = (rectangle1->y)+((rectangle1->h /2)-(((rectangle1->h) - (rectangle1->x)) /2)), affichage->raw = rectangle1->h-rectangle1->x, affichage->rah = rectangle1->h-rectangle1->x; SDL_Rect *rectangleA ; affichage->rectangleA->x = affichage->rax; affichage->rectangleA->y = affichage->ray; affichage->rectangleA->w = affichage->raw/2; affichage->rectangleA->h =affichage->rah /2; SDL_SetRenderDrawColor(renderer,0,255,64,0); //VERT SDL_RenderFillRect(renderer, affichage->rectangleA); SDL_Rect *rectangleB ; affichage->rectangleB->x = affichage->rax + (affichage->raw/2); affichage->rectangleB->y = affichage->ray; affichage->rectangleB->w = affichage->raw/2; affichage->rectangleB->h =affichage->rah /2; SDL_SetRenderDrawColor(renderer,255,128,128,0); SDL_RenderFillRect(renderer, affichage->rectangleB); SDL_Rect *rectangleY ; affichage->rectangleY->x = affichage->rax ; affichage->rectangleY->y = affichage->ray+ (affichage->raw/2); affichage->rectangleY->w = affichage->raw/2; affichage->rectangleY->h =affichage->rah /2; SDL_SetRenderDrawColor(renderer,255,128,0,0); //ORANGE SDL_RenderFillRect(renderer, affichage->rectangleY); SDL_Rect *rectangleX ; affichage->rectangleX->x = affichage->rax + (affichage->raw/2); affichage->rectangleX->y = affichage->ray+ (affichage->raw/2); affichage->rectangleX->w = affichage->raw/2; affichage->rectangleX->h =affichage->rah /2; SDL_SetRenderDrawColor(renderer,0,0,255,0); //BLEU SDL_RenderFillRect(renderer, affichage->rectangleX); SDL_RenderPresent(renderer);
Quand je n'utilise pas les pointeur, ca marche j'ai mes coulours et carrés qui se dessine, comme ca:
SDL_Rect *rectangle1 ; affichage->rectangle1->x = 20; rectangle1.y = 20; rectangle1.w = r1w - (rectangle1.x*2); rectangle1.h = r1h - (rectangle1.y*2); SDL_SetRenderDrawColor(renderer,255,255,255,255); // blanc SDL_RenderFillRect(renderer, &rectangle1); int rax = (rectangle1.x)+((rectangle1.w/2)-(((rectangle1.h) - (rectangle1.x))/2)), ray = (rectangle1.y)+((rectangle1.h /2)-(((rectangle1.h) - (rectangle1.x)) /2)), raw = rectangle1.h-rectangle1.x, rah = rectangle1.h-rectangle1.x; SDL_Rect rectangleA ; rectangleA.x = rax; rectangleA.y = ray; rectangleA.w = raw/2; rectangleA.h =rah /2; SDL_SetRenderDrawColor(renderer,0,255,64,0); //VERT SDL_RenderFillRect(renderer, &rectangleA); SDL_Rect rectangleB ; rectangleB.x = rax + (raw/2); rectangleB.y = ray; rectangleB.w = raw/2; rectangleB.h =rah /2; SDL_SetRenderDrawColor(renderer,255,128,128,0); SDL_RenderFillRect(renderer, &rectangleB); SDL_Rect rectangleY ; rectangleY.x = rax ; rectangleY.y = ray+ (raw/2); rectangleY.w = raw/2; rectangleY.h =rah /2; SDL_SetRenderDrawColor(renderer,255,128,0,0); //ORANGE SDL_RenderFillRect(renderer, &rectangleY); SDL_Rect rectangleX ; rectangleX.x = rax + (raw/2); rectangleX.y = ray+ (raw/2); rectangleX.w = raw/2; rectangleX.h =rah /2; SDL_SetRenderDrawColor(renderer,0,0,255,0); //BLEU SDL_RenderFillRect(renderer, &rectangleX); SDL_RenderPresent(renderer);*/
2 réponses
Je n'ai évidemment pas testé tout ton code, mais si tu ouvre l'oeil, le bon, et que tu lis:
warning: unused variable 'rectangleB' [-Wunused-variable]
C'est une notification du compilateur indiquant que ta variable rectangleB est définie mais non utilisée. Si tu ne l'utilises nulle part, supprime la.
warning: unused variable 'rectangleB' [-Wunused-variable]
C'est une notification du compilateur indiquant que ta variable rectangleB est définie mais non utilisée. Si tu ne l'utilises nulle part, supprime la.
Salut,
Si tu veux faire des pointeurs propre, utilise l'allocation dynamique quand tu les déclarent (malloc).
Si tu veux faire des pointeurs propre, utilise l'allocation dynamique quand tu les déclarent (malloc).
honnetement j'essaye plein de truc mes ca marche pas
ma structure:
Ma fonctio affichage:
j'initialise ma structure
||=== Build: Debug in 6wd_SDL2_test (compiler: GNU GCC Compiler) ===|
C:\Users\Nico\Desktop\Projet C\6wd_SDL2_test\fonction.c||In function 'intialisationAffichage':|
C:\Users\Nico\Desktop\Projet C\6wd_SDL2_test\fonction.c|66|warning: unused variable 'ArrierePlan' [-Wunused-variable]|
C:\Users\Nico\Desktop\Projet C\6wd_SDL2_test\fonction.c||In function 'ArrierePlan':|
C:\Users\Nico\Desktop\Projet C\6wd_SDL2_test\fonction.c|460|error: expected expression before '/' token|
C:\Users\Nico\Desktop\Projet C\6wd_SDL2_test\fonction.c|454|warning: unused variable 'rectangle1' [-Wunused-variable]|
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
ma structure:
typedef struct Affichage Affichage; struct Affichage { //Fenetre //int WIDTH, HEIGHT; int rax ; int ray ; int raw; int rah ; SDL_Texture *ArrierePlan; SDL_Rect *rectangle1; SDL_Rect *rectangleA; SDL_Rect *rectangleB; SDL_Rect *rectangleX; SDL_Rect *rectangleY; };
Ma fonctio affichage:
void ArrierePlan(char *titre,Affichage *affichage) { affichage->ArrierePlan = NULL; //affichage->Texture = NULL; //Creation de la fenetre screen = SDL_CreateWindow(titre,SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,WINDOW_W,WINDOW_H,SDL_WINDOW_SHOWN); //Creation du renderer renderer = SDL_CreateRenderer(screen,-1,SDL_RENDERER_ACCELERATED); if (screen == NULL || renderer == NULL) { printf("Impossible d'initialiser le mode ecran %s ,\n", SDL_GetError()); } SDL_SetRenderDrawColor(renderer, 255, 0, 0, 0); SDL_RenderClear(renderer); //chargement de l'image de fond // affichage->ArrierePlan = SDL_LoadBMP("6wd.bmp"); //SDL_CreateTextureFromSurface(renderer, affichage->ArrierePlan); int r1w =WINDOW_W , r1h = WINDOW_H/4; SDL_Rect *rectangle1 ; affichage->rectangle1->x = 20; affichage->rectangle1->y = 20; affichage->rectangle1->w = r1w - (affichage->rectangle1->x*2); affichage->rectangle1->h = r1h - (affichage->rectangle1->y*2); SDL_SetRenderDrawColor(renderer,255,255,255,255); // blanc SDL_RenderFillRect(renderer,affichage->rectangle1);
j'initialise ma structure
void intialisationAffichage(Affichage *affichage) { SDL_Texture *ArrierePlan = NULL; affichage->rectangle1->x = 0; affichage->rectangle1->y = 0; affichage->rectangle1->w = 0; affichage->rectangle1->h = 0; affichage->rax = 0; affichage->ray = 0; affichage->raw = 0; affichage->rah = 0; affichage->rectangleA->x = 0; affichage->rectangleA->y = 0; affichage->rectangleA->w = 0; affichage->rectangleA->h = 0; affichage->rectangleB->x = 0; affichage->rectangleB->y = 0; affichage->rectangleB->w = 0; affichage->rectangleB->h = 0; affichage->rectangleY->x = 0; affichage->rectangleY->y = 0; affichage->rectangleY->w = 0; affichage->rectangleY->h = 0; affichage->rectangleX->x = 0; affichage->rectangleX->y = 0; affichage->rectangleX->w = 0; affichage->rectangleX->h = 0; }
||=== Build: Debug in 6wd_SDL2_test (compiler: GNU GCC Compiler) ===|
C:\Users\Nico\Desktop\Projet C\6wd_SDL2_test\fonction.c||In function 'intialisationAffichage':|
C:\Users\Nico\Desktop\Projet C\6wd_SDL2_test\fonction.c|66|warning: unused variable 'ArrierePlan' [-Wunused-variable]|
C:\Users\Nico\Desktop\Projet C\6wd_SDL2_test\fonction.c||In function 'ArrierePlan':|
C:\Users\Nico\Desktop\Projet C\6wd_SDL2_test\fonction.c|460|error: expected expression before '/' token|
C:\Users\Nico\Desktop\Projet C\6wd_SDL2_test\fonction.c|454|warning: unused variable 'rectangle1' [-Wunused-variable]|
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
SDL_Rect rectangle1 ; rectangle1.x = 20; rectangle1.y = 20; rectangle1.w = r1w - (rectangle1.x*2); rectangle1.h = r1h - (rectangle1.y*2); SDL_SetRenderDrawColor(renderer,255,255,255,255); // blanc SDL_RenderFillRect(renderer, &rectangle1);
C'est le code sans utiliser de pointeur, ca fonctionne.
SDL_Rect Fait partie de la librairie SDL2
En faite SDL_Rect prend 4 variable x,y,w,h
(x,y) position du rectangle
w Longueur
h Hauteur
pour le rectangleA par ex je l'utilise mais ca marche pas!
j'ai mal fait un truc à mon avis