Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL ( nombre d'image )

    20 août 2006 à 18:37:52

    salut

    donc j'essaye d'afficher un fond sur l'ecran + 2 image .

    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>

    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *zozor = NULL , *fond = NULL , *grunt = NULL;;
        SDL_Rect positionzozor , position , positiongrunt;
        positiongrunt.x = 0;
        positiongrunt.y = 0;
        position.x = 0;
        position.y = 0;
        positionzozor.x = 510;
        positionzozor.y = 20;
        SDL_Event event;
        int continuer = 1;

        SDL_Init(SDL_INIT_VIDEO);

        ecran = SDL_SetVideoMode(718, 540, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Gestion des evenements en SDL", NULL);

        fond = IMG_Load("Sanstitre.bmp");
        SDL_BlitSurface(fond , NULL , ecran , &position);

            SDL_Flip(ecran);

        zozor = IMG_Load("link.bmp");
        SDL_SetAlpha(zozor, SDL_SRCALPHA, 128);
        SDL_BlitSurface(zozor , NULL , ecran , &positionzozor);


            SDL_Flip(ecran);


        fond = IMG_Load("joey_grunt.bmp");
        SDL_BlitSurface(grunt , NULL , ecran , &position);





        SDL_EnableKeyRepeat(10, 10);

        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                  case SDL_KEYDOWN:
                switch (event.key.keysym.sym)
                {
                    case SDLK_UP: // Flèche haut
                            positiongrunt.y--;
                            break;
                        case SDLK_DOWN: // Flèche bas
                            positiongrunt.y++;
                            break;
                        case SDLK_RIGHT: // Flèche droite
                            positiongrunt.x++;
                            break;
                        case SDLK_LEFT: // Flèche gauche
                            positiongrunt.x--;
                            break;
                }
                break;
            }

                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); /* On efface l'écran */
            SDL_BlitSurface(grunt, NULL, ecran, &positiongrunt);
            SDL_BlitSurface(fond, NULL, ecran, &position);
            SDL_BlitSurface(zozor, NULL, ecran, &positionzozor); /* On place zozor à sa nouvelle position */
            SDL_Flip(ecran); /* On met à jour l'affichage */
        }





        SDL_FreeSurface(zozor);
        SDL_FreeSurface(fond);
        SDL_FreeSurface(grunt);
        SDL_Quit();

        return EXIT_SUCCESS;

        }





    avec ce code , le fond ne s'affiche pas et si j'enleve c'est ligne :
    fond = IMG_Load("joey_grunt.bmp");
        SDL_BlitSurface(grunt , NULL , ecran , &position);


    c'est joey_grunt qui ne s'affiche pas !!!!

    a l'aide !!!!!!!!!!!!! :(
    • Partager sur Facebook
    • Partager sur Twitter
      20 août 2006 à 18:41:43

      A la fin du while, il me semble que tu devrais blitter le fond avant le grunt, sinon le fond sera blitté dessus et tu verra pas ce qu'il y a en dessous.

      edit : sinon ton grunt s'affiche pas au début parce que tu ne flip pas l'écran après l'avoir blitté.
      • Partager sur Facebook
      • Partager sur Twitter
        20 août 2006 à 18:44:29

        les 2 dernier s'affiche pas le 1er ( le fond apparais a la vitesse de la lumiere !)

        edit : je viens de mettre le flip == pareil :(
        • Partager sur Facebook
        • Partager sur Twitter
          20 août 2006 à 18:48:12

          Ca doit pas être ça mais a la fin de ta première ligne ya 2 ";"
          • Partager sur Facebook
          • Partager sur Twitter
            20 août 2006 à 18:49:37

            Non mais merci quand meme
            • Partager sur Facebook
            • Partager sur Twitter
              20 août 2006 à 19:57:01

              Je te conseille de regarder à la ligne de chargement de joey_grunt.bmp... tu as mis fond = IMG_Load etc... au lieu de grunt = IMG_Load etc.

              Avec cette petite erreur, normal que ton fond s'affiche à la vitesse de la lumière et disparaisse.
              • Partager sur Facebook
              • Partager sur Twitter
                20 août 2006 à 20:02:16

                ^^


                fond = IMG_Load("joey_grunt.bmp");
                SDL_BlitSurface(grunt , NULL , ecran , &position);


                C'est là que ça plante...

                tu mets joey_grunt en image de fond, c'est pas normal

                EDIT: au lieu de "&position", ce ne serait pas "&positiongrunt" ?
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  20 août 2006 à 20:04:01

                  Oui en SDL, faut faire attention quand tu blittes, tu dois blitter dans le bonne ordre, genre ne blitte pas ton fond d'ecran en dernier car il se metre au dessus de tout le reste, ton erreur doit se situer a ce niveau je pense!
                  d'ailleurs je serais toi, je ne ferais qu'un SDL_Flip(ecran); Je paris meme que c'est ca la solution XD
                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 août 2006 à 20:05:39

                    Non non, il faut regarder de ce côté-là :


                        fond = IMG_Load("Sanstitre.bmp");
                        SDL_BlitSurface(fond , NULL , ecran , &position);

                            SDL_Flip(ecran);

                        zozor = IMG_Load("link.bmp");
                        SDL_SetAlpha(zozor, SDL_SRCALPHA, 128);
                        SDL_BlitSurface(zozor , NULL , ecran , &positionzozor);


                            SDL_Flip(ecran);


                        fond = IMG_Load("joey_grunt.bmp");
                        SDL_BlitSurface(grunt , NULL , ecran , &position);


                    C'est pas fond qu'il faut mettre en bas, c'est grunt !
                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 août 2006 à 20:11:38

                      ton erreur c'est que tu a attribé l'image joey_grunt.bmp à la variable fond comme la signalé Wraithslayer, donc ta variable grunt a une valeur NULL, de plus ton fond d'écran sera supprimer de la variable et remplacer par l'image que tu charge, il te suffit juste de changerle nom de la variable, et je trouver inutile de blité la surface au moment ou tu la charge. Les blits à la fin de la condition sont suffisant
                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 août 2006 à 21:14:14

                        #include <stdlib.h>
                        #include <stdio.h>
                        #include <SDL/SDL.h>
                        #include <SDL/SDL_image.h>

                        int main(int argc, char *argv[])
                        {
                            SDL_Surface *ecran = NULL, *zozor = NULL , *fond = NULL , *grunt = NULL;;
                            SDL_Rect positionzozor , position , positiongrunt;
                            positiongrunt.x = 0;
                            positiongrunt.y = 0;
                            position.x = 0;
                            position.y = 0;
                            positionzozor.x = 510;
                            positionzozor.y = 20;
                            SDL_Event event;
                            int continuer = 1;

                            SDL_Init(SDL_INIT_VIDEO);

                            ecran = SDL_SetVideoMode(718, 540, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                            SDL_WM_SetCaption("Gestion des evenements en SDL", NULL);

                            fond = IMG_Load("Sanstitre.bmp");
                            SDL_BlitSurface(fond , NULL , ecran , &position);

                                SDL_Flip(ecran);

                            zozor = IMG_Load("link.bmp");
                            SDL_SetAlpha(zozor, SDL_SRCALPHA, 128);
                            SDL_BlitSurface(zozor , NULL , ecran , &positionzozor);





                            grunt = IMG_Load("grunt.bmp");
                            SDL_BlitSurface(grunt , NULL , ecran , &positiongrunt);





                            SDL_EnableKeyRepeat(10, 10);

                            while (continuer)
                            {
                                SDL_WaitEvent(&event);
                                switch(event.type)
                                {
                                    case SDL_QUIT:
                                        continuer = 0;
                                        break;
                                      case SDL_KEYDOWN:
                                    switch (event.key.keysym.sym)
                                    {
                                        case SDLK_UP: // Flèche haut
                                                positiongrunt.y--;
                                                break;
                                            case SDLK_DOWN: // Flèche bas
                                                positiongrunt.y++;
                                                break;
                                            case SDLK_RIGHT: // Flèche droite
                                                positiongrunt.x++;
                                                break;
                                            case SDLK_LEFT: // Flèche gauche
                                                positiongrunt.x--;
                                                break;
                                    }
                                    break;
                                }

                                    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); /* On efface l'écran */
                                SDL_BlitSurface(fond, NULL, ecran, &position);
                                SDL_BlitSurface(grunt, NULL, ecran, &positiongrunt);
                                SDL_BlitSurface(zozor, NULL, ecran, &positionzozor); /* On place zozor à sa nouvelle position */
                                SDL_Flip(ecran); /* On met à jour l'affichage */
                            }





                            SDL_FreeSurface(zozor);
                            SDL_FreeSurface(fond);
                            SDL_FreeSurface(grunt);
                            SDL_Quit();

                            return EXIT_SUCCESS;

                            }



                        J'ai reussi avec ca

                        merci a tous ! :)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        SDL ( nombre d'image )

                        × 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