SDL2 Les pointeurs
Résolu
poparnassus
Messages postés
462
Statut
Membre
-
poparnassus Messages postés 462 Statut Membre -
poparnassus Messages postés 462 Statut Membre -
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. -
Salut,
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: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 structurevoid 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
-