SDL2 Les pointeurs

Résolu/Fermé
Signaler
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
-
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
-
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

//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

Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
963
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.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
28
SDL_RenderFillRect(renderer, affichage->rectangleA);


pour le rectangleA par ex je l'utilise mais ca marche pas!
j'ai mal fait un truc à mon avis
Messages postés
8554
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
21 juillet 2020
627
Salut,

Si tu veux faire des pointeurs propre, utilise l'allocation dynamique quand tu les déclarent (malloc).
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
28
Bon j'ai declarer mais SDL_Rect rectangle1 A B X Y en variable globale sans utilisé de structure et la ca marche.
Mais je ne sais toujours pas comment le faire avec des pointeurs!
Messages postés
8554
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
21 juillet 2020
627
<code><

(*Affichage).rectangle1.x = 20/code>
Essaye ça.
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 797
J'ai pas tout lu.
Mais
SDL_Rect *rectangle1;
affichage->rectangle1->x = 0;

Ca ne peut pas marcher.
Il faut allouer rectangle1.
SDL_Rect *rectangle1=malloc(sizeof(SDL_RECT));

Si ça plante toujours, vérifie l'allocation d'affichage.
Messages postés
8554
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
21 juillet 2020
627
Il a toujours pas alloué? Je lui ai dis dans le 1er commentaire ><.
Messages postés
419
Date d'inscription
vendredi 28 mars 2014
Statut
Membre
Dernière intervention
25 décembre 2019
28
En faite non, ceux sont des forme static qui n'ont pas besoin d'allocation de memoire, plus que je passe par une structure et utilise des fonctions qui alloue automatiquement.

si il y a des interesser c'est par ici que ca ce passe !! C'est le post complet de ce que je devellope !

https://forums.commentcamarche.net/forum/affich-33386197-sdl2-code-block-gestion-evenement-creation-de-surface#p33407413