Partage
  • Partager sur Facebook
  • Partager sur Twitter

mon code plante

ne pe pas blitter apres un clic

Sujet résolu
    15 avril 2006 à 19:58:32

    Bon voila mon code, lorsque je clic il ne créé pas de villa comme il devrait le faire :
    void gestion_menu(SDL_Surface *ecran){
        SDL_Surface  *maison = NULL;
        maison = SDL_LoadBMP("villa.bmp");
        SDL_Rect positionVilla, positionBoutonVilla;
         positionVilla.x=640;
        positionVilla.y=45;
    SDL_Event event;
    SDL_WaitEvent(&event);
    switch(event.type)
    {

        case SDL_MOUSEBUTTONUP:
        if ( 1==1) {
            SDL_Rect coo;
            coo.x =25;
            coo.y =30;
            SDL_BlitSurface(maison, NULL, ecran, &coo);
            }/* Clic de la souris */
            break;
    }




        }
    help me please
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      15 avril 2006 à 20:22:37

      1° Utilise MOUSEBUTTONDOWN a la place de MOUSBUTTONUP
      2° tu dois faire un flip pour afficher la prochaine image, rajoute après le blit SDL_Flip(ecran);
      • Partager sur Facebook
      • Partager sur Twitter
        15 avril 2006 à 20:54:33

        Bon alors, merci voisci le code corriger (qui ne marche tjr pas) :
        }
        void gestion_menu(SDL_Surface *ecran){
            SDL_Surface  *maison = NULL;
            maison = SDL_LoadBMP("villa.bmp");
            SDL_Rect positionVilla, positionBoutonVilla;
             positionVilla.x=640;
            positionVilla.y=45;
        SDL_Event event;
        SDL_WaitEvent(&event);
        switch(event.type)
        {

            case SDL_MOUSEBUTTONDOWN:
            if ( 1==1) {
                SDL_Rect coo;
                coo.x =25;
                coo.y =30;
                SDL_BlitSurface(maison, NULL, ecran, &coo);
                SDL_Flip(ecran);
                }/* Clic de la souris */
                break;
        }




            }
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          15 avril 2006 à 20:57:00

          Les variables positionVilla et positionBoutonVilla ne servent a rien .
          Et c'est quoi ce if (1==1) ???

          L'image ne s'affiche toujours pas après ses modifications, alors vérifie que le fichier que tu charge (villa.bmp) existe bien
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            15 avril 2006 à 20:57:50

            Et aussi, ton coo se blit bien, mais comme il n'y a rien dedans ( pas d'image, pas de couleur ) ca n'affiche rien
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              15 avril 2006 à 20:59:28

              Le coo ne se blitte pas, ca sont les coordonnées où blitter l'image (25,30)
              • Partager sur Facebook
              • Partager sur Twitter
                15 avril 2006 à 21:02:58

                coo ne contient pas l'image a blitter :-° c'est juste la position a laquelle je dois blitter maison qui elle est une surface contenant une image.D'ou vient le problème ?
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  15 avril 2006 à 21:06:24

                  Si tu fait cela, est ce que ca marche :

                  SDL_CreateRGBSurface(SDL_HWSURFACE, 800,600,32,0,0,0,0);
                  SDL_FillRect(fond, NULL, SDL_MapRGB(fond->format, 255,0,0));
                  SDL_BlitSurface(maison, NULL, ecran, &coo);


                  Met ca juste avant le flip, si l'endroit ou doit se trouver la villa est rouge, c'est bon
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 avril 2006 à 21:09:34

                    Non ca ne marche pas la zone n'est pas en rouge, je croi que le problème vient de l'événement, j'ai l'impression qu'il ne percoi pas les clics.....
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      15 avril 2006 à 21:12:35

                      Est tu sur que tu appele la fonction correctement dans le main?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 avril 2006 à 21:16:54

                        ben en faite c'est une fonction qui est appeler dans une fonction qui est appeler dans main :-° voici tout le code : Main.cpp
                        #include <stdlib.h>
                        #include <stdio.h>
                        #include <SDL/SDL.h>
                        #include <SDL/SDL_image.h>
                        #include "Menu.c"
                        #define ZOOOM *1
                        #define HAUTEUR_FENETRE 600

                        #define LARGEUR_FENETRE 800


                        void pause()
                        {
                            int continuer = 1;
                            SDL_Event event;

                            while (continuer)
                            {
                                SDL_WaitEvent(&event);
                                switch(event.type)
                                {
                                    case SDL_QUIT:
                                        continuer = 0;
                                }
                            }
                        }
                        int main(int argc, char *argv[])
                        {
                            SDL_Init(SDL_INIT_VIDEO);
                          SDL_Surface *ecran = NULL, *imageDeFond = NULL;
                            SDL_Rect positionFond;
                            long fond = 10000, pop = 0;

                        int i=0, w=0;
                            ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                            SDL_WM_SetCaption("Chargement d'images en SDL", NULL);

                            /* Chargement d'une image Bitmap dans une surface */
                            imageDeFond = SDL_LoadBMP("herbe.bmp");

                            /* On blitte par-dessus l'écran */
                            for (w = 0; w<=12;){
                                positionFond.y=w*50;
                                w++;
                            for (i = 0 ; i <= 16 ;){
                             positionFond.x = i*50;
                            SDL_BlitSurface(imageDeFond, NULL, ecran, &positionFond);
                            i++;
                            }
                            }
                            /* On charge l'image : */

                        affichage_menu(ecran);
                        /*************************************************************************************/
                        /***********************Générateur coo************************************************/
                        /*************************************************************************************/

                            pause();


                            SDL_FreeSurface(ecran);
                            SDL_FreeSurface(imageDeFond); /* On libère la surface */
                            SDL_Quit();

                            return EXIT_SUCCESS;
                        }
                        Menu.c
                        #include <stdlib.h>
                        #include <stdio.h>
                        #include <SDL/SDL.h>
                        #include <SDL/SDL_image.h>
                        void gestion_menu(SDL_Surface *ecran);
                        void affichage_menu(SDL_Surface *ecran);
                        void affichage_menu(SDL_Surface *ecran){
                            SDL_Surface *menu = NULL, *menu2=NULL, *BoutonVilla=NULL;
                        menu2 = SDL_LoadBMP("droite.bmp");



                            SDL_Rect positionMenu2, positionBoutonVilla;
                            positionMenu2.x=624;
                            positionMenu2.y=30;
                            positionBoutonVilla.x=640;
                            positionBoutonVilla.y=45;
                            SDL_BlitSurface(menu2, NULL, ecran, &positionMenu2);

                            menu = SDL_LoadBMP("menu.bmp");
                            /* On rend le bleu derrière Zozor transparent : */
                        SDL_SetColorKey(menu, SDL_SRCCOLORKEY, SDL_MapRGB(menu->format, 0, 204, 0));
                        /* On blitte l'image maintenant transparente sur le fond : */


                            SDL_Rect positionMenu;
                            positionMenu.x=0;
                            positionMenu.y=0;
                            SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
                            BoutonVilla = SDL_LoadBMP("boutonvilla.bmp");
                            SDL_BlitSurface(BoutonVilla, NULL, ecran, &positionBoutonVilla);
                            SDL_FreeSurface(menu);
                            SDL_FreeSurface(menu2);
                            gestion_menu(ecran);
                        }
                        void gestion_menu(SDL_Surface *ecran){
                            SDL_Surface  *maison = NULL, *fond = NULL;
                            maison = SDL_LoadBMP("villa.bmp");
                            SDL_Rect positionVilla, positionBoutonVilla;
                             positionVilla.x=640;
                            positionVilla.y=45;
                        SDL_Event event;
                        SDL_WaitEvent(&event);
                        switch(event.type)
                        {

                            case SDL_MOUSEBUTTONDOWN:
                            if ( 1==1) {
                                SDL_Rect coo;
                                coo.x =25;
                                coo.y =30;
                                SDL_BlitSurface(maison , NULL, ecran, &coo);
                                SDL_CreateRGBSurface(SDL_HWSURFACE, 800,600,32,0,0,0,0);
                        SDL_FillRect(fond, NULL, SDL_MapRGB(fond->format, 255,0,0));
                        SDL_BlitSurface(maison, NULL, ecran, &coo);
                                SDL_Flip(ecran);
                                }/* Clic de la souris */
                                break;
                        }




                            }
                        Walla dsl c un pe long et ya pas de commentaire ! mais globalement jappele affichage_menu qui génère le menu et gestion_menu qui gère les clics sur les boutons. bon courages :euh: et merci de m'aider
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          15 avril 2006 à 21:24:58

                          Et si tu fait le flip après l'appel de affichage_ecran dans main?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 avril 2006 à 21:27:50

                            toujour rien ca ne marche pas :(:(:(:(
                            mais le problème ne vient pas du flip car si j'enlève le switch et la gestion de l'évènement (le wait etc) et ben ca marche nikel .....
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              15 avril 2006 à 21:30:08

                              essaie alors avec sdl_pollevent
                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 avril 2006 à 21:30:52

                                euh o_O:euh: je le met ou ?
                                c bn : ca ne marche pas nn plus mais jen ai profiter pour modif :
                                void gestion_menu(SDL_Surface *ecran){
                                    SDL_Surface  *maison = NULL, *fond = NULL;
                                    maison = SDL_LoadBMP("villa.bmp");
                                    SDL_Rect positionVilla, positionBoutonVilla, coo;
                                     positionVilla.x=640;
                                    positionVilla.y=45;
                                SDL_Event event;
                                SDL_PollEvent(&event);
                                switch(event.type)
                                {

                                    case SDL_MOUSEBUTTONDOWN:

                                        coo.x =25;
                                        coo.y =30;
                                        SDL_BlitSurface(maison , NULL, ecran, &coo);


                                        /* Clic de la souris */
                                        break;
                                }




                                    }
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 avril 2006 à 10:04:25

                                  :p:p:p:p:p:p:p J'ai trouver le problème venait du fait quer je ne fesait pas un switch avec continuer de cette facon quand je bougeaila sourie, avant d'apuyer sur celle ci l'événement était déjà traiter car il y avait la sourie qui avait bougé mer ci tout de méme a tous et en particulier a acieroïde qui m'a bien aider merci!!!!! ^^^^^^^^^^
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    16 avril 2006 à 10:07:59

                                    J'adore toute la discussion, alors que l'absence de boucle sautait aux yeux :p
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    mon code plante

                                    × 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