Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme surfaces

creation du drapeau de la france

Sujet résolu
    3 janvier 2008 à 13:16:24

    Salut les SDZs,un petit probleme avec la manipulation des surfaces,j'essaye de créer le drapeau de france, voici le code:

    1. #include <stdlib.h>
    2. #include <stdio.h>
    3. #include <SDL/SDL.h>
    4. void pause();
    5. int main(int argc, char *argv[])
    6. {
    7.     SDL_Surface *ecran = NULL, *barre = NULL,*BARRE = NULL;
    8.     SDL_Rect position;
    9.     SDL_Init(SDL_INIT_VIDEO);
    10.     ecran = SDL_SetVideoMode(630, 480, 32, SDL_HWSURFACE);
    11.     barre = SDL_CreateRGBSurface(SDL_HWSURFACE, 210, 160, 32, 0, 0, 0, 0); // Allocation de la surface
    12.     BARRE = SDL_CreateRGBSurface(SDL_HWSURFACE, 210, 160, 32, 0, 0, 0, 0);
    13.     SDL_WM_SetCaption("Ma super fenêtre SDL !", NULL);
    14.     SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
    15.     position.x = 210; // Les coordonnées de la surface seront (0, 0)
    16.     position.y = 480;
    17.     SDL_FillRect(barre, NULL, SDL_MapRGB(ecran->format, 0, 0, 255)); // Remplissage de la surface avec du blanc
    18.     SDL_BlitSurface(barre, NULL, ecran, &position); // Collage de la surface sur l'écran
    19.     Position.x = 420;
    20.     Position.y = 480;
    21.     SDL_FillRect(BARRE, NULL, SDL_MapRGB(ecran->format, 255, 0, 0));
    22.     SDL_BlitSurface(BARRE, NULL, ecran, &Position);
    23.     SDL_Flip(ecran); // Mise à jour de l'écran
    24.     pause();
    25.     SDL_FreeSurface(barre, BARRE); // Libération de la surface
    26.     SDL_Quit();
    27.     return EXIT_SUCCESS;
    28. }
    29. void pause()
    30. {
    31.     int continuer = 1;
    32.     SDL_Event event;
    33.     while (continuer)
    34.     {
    35.         SDL_WaitEvent(&event);
    36.         switch(event.type)
    37.         {
    38.             case SDL_QUIT:
    39.                 continuer = 0;
    40.         }
    41.     }
    42. }


    Merci d'avances pour vos reponses !
    SDZ powaaaaaaa ! ;)
    • Partager sur Facebook
    • Partager sur Twitter
      3 janvier 2008 à 13:26:40

      D'un premier coup d'oeil j'ai remarqué que tu utilises Position et non position dans certaine partie du code.

      Attention à ça.

      Tu ne blittes pas tes surfaces aux bons endroits également.
      • Partager sur Facebook
      • Partager sur Twitter
        3 janvier 2008 à 13:36:51

        a oki je pensais qu'il fallait que sa soit different merci

        EDIT:euh maintenant je n'ai aucune erreur mais c'est tout blanc !

        Citation : Homer Simpsons

        D'oh !!!


        Mon code:

        1. #include <stdlib.h>
        2. #include <stdio.h>
        3. #include <SDL/SDL.h>
        4. void pause();
        5. int main(int argc, char *argv[])
        6. {
        7.     SDL_Surface *ecran = NULL, *barre = NULL,*BARRE = NULL;
        8.     SDL_Rect position;
        9.     SDL_Init(SDL_INIT_VIDEO);
        10.     ecran = SDL_SetVideoMode(630, 480, 32, SDL_HWSURFACE);
        11.     barre = SDL_CreateRGBSurface(SDL_HWSURFACE, 210, 160, 32, 0, 0, 0, 0); // Allocation de la surface
        12.     BARRE = SDL_CreateRGBSurface(SDL_HWSURFACE, 210, 160, 32, 0, 0, 0, 0);
        13.     SDL_WM_SetCaption("Ma super fenetre SDL !", NULL);
        14.     SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        15.     position.x = 210; // Les coordonnées de la surface seront (0, 0)
        16.     position.y = 480;
        17.     SDL_FillRect(barre, NULL, SDL_MapRGB(ecran->format, 0, 0, 255)); // Remplissage de la surface avec du blanc
        18.     SDL_BlitSurface(barre, NULL, ecran, &position); // Collage de la surface sur l'écran
        19.     position.x = 420;
        20.     position.y = 480;
        21.     SDL_FillRect(BARRE, NULL, SDL_MapRGB(ecran->format, 255, 0, 0));
        22.     SDL_BlitSurface(BARRE, NULL, ecran, &position);
        23.     SDL_Flip(ecran); // Mise à jour de l'écran
        24.     pause();
        25.     SDL_FreeSurface(barre); // Libération de la surface
        26.     SDL_FreeSurface(BARRE);
        27.     SDL_Quit();
        28.     return EXIT_SUCCESS;
        29. }
        30. void pause()
        31. {
        32.     int continuer = 1;
        33.     SDL_Event event;
        34.     while (continuer)
        35.     {
        36.         SDL_WaitEvent(&event);
        37.         switch(event.type)
        38.         {
        39.             case SDL_QUIT:
        40.                 continuer = 0;
        41.         }
        42.     }
        43. }
        • Partager sur Facebook
        • Partager sur Twitter
          3 janvier 2008 à 13:48:53

          Image utilisateur

          Sa devrait t'aider ;)
          Entre parenthese la position (x,y) des surfaces.

          La premiere (bleu) est donc :
          position.x = 0;
          position.y = 0;

          La blanche est inutile à cause du fond dejà blanc.

          La troisieme (rouge) est :
          position.x = 420;
          position.y = 0;

          Enfaite quand tu blittes une surface la position que tu lui donne est le coin supérieur gauche de cette surface.

          Tu as mis position.y = 480. Donc la surface n'est pas visible à l'écran :)
          • Partager sur Facebook
          • Partager sur Twitter
            3 janvier 2008 à 13:53:08

            hum mais la rayure rouge et bleu ne vas jusque en bas !!!Sinon merci pour
            les coordonnées !
            • Partager sur Facebook
            • Partager sur Twitter
              3 janvier 2008 à 13:56:09

              Si les rayures ne vont pas jusqu'en bas c'est que ta surface a une hauteur insuffisante.

              1. barre = SDL_CreateRGBSurface(SDL_HWSURFACE, 210, 160, 32, 0, 0, 0, 0);


              La hauteur de la surface est 160.
              Alors que ton écran a une hauteur de 480.
              • Partager sur Facebook
              • Partager sur Twitter
                3 janvier 2008 à 14:00:58

                Elementaire mon cher 4drien !!merci beaucoup!!tu es un as,mec !!!!!
                • Partager sur Facebook
                • Partager sur Twitter

                Probleme surfaces

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown