Partage
  • Partager sur Facebook
  • Partager sur Twitter

Evenement en un seul clique !

Comment faire ?

Sujet résolu
    28 avril 2006 à 22:28:49

    Bonjour à tous !


    Je m'appelle M@zero et je viens de terminer le cours du TP MarioSokoban... :D

    Et je viens de faire un petit programme très simple où je dois cliquer sur une image nommée HAMAC.GIF pour effectuer une action...

    Mais voilà à chaque tentative ECHEC TOTALE... :(

    Si une personne ayant trouvé le problème à ma solution pouvait m'aidé se serait sympa... ^^

    Je vous joint mon fichier source :

    #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, *hamac = NULL;
        int boucle1 = 1;
        SDL_Rect positionHamac;
        SDL_Event event;

        SDL_Init(SDL_INIT_VIDEO);

        ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("MonTest", NULL);
        hamac = IMG_Load("hamac.gif");

        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        positionHamac.x = 800 / 2 - 59;
        positionHamac.y = 600 / 2 - 59;
        SDL_BlitSurface(hamac, NULL, ecran, &positionHamac);

       

       
       
       
        while (boucle1)/* Menu principal*/
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    boucle1 = 0;
                break;
            }
        SDL_Flip(ecran);/* Desolez N1gHtm@r3 j'avais oubliez... ^^*/
        }
       
       
       
        SDL_FreeSurface(hamac);
        SDL_Quit();

        return EXIT_SUCCESS;
    }


    Merci à tous pour votre aide... :)
    Amicalement M@zero !
    • Partager sur Facebook
    • Partager sur Twitter
      28 avril 2006 à 22:31:32

      SDL_Flip(ecran);


      pour actualiser l'écran après le blittage
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        28 avril 2006 à 22:33:51

        Récupère les positions x et y de la souris et :

        if (souris_x>positionHamac.x && souris_x < positionHamac.x+hamac->w)
            if(souris_y> positionHamac.y && souris_y<positionHamac.y+hamac->h)
                action();


        sachant que souris_x et souris_y sont respectivement les positions x et y de la souris, il suffit de les remplacer par event.motion.x et event.motion.y (je crois)
        • Partager sur Facebook
        • Partager sur Twitter
          28 avril 2006 à 22:36:23

          Je vais testez ca de suite acieroid ^^

          Super !J'ai réussis ^^
          Sa me fais plaisir de pouvoir compter sur des Zeros(enfin plus tout à fais ;) ) comme toi...

          Je te remercie encore!!!!!

          Amicalement M@zero .

          Euhhhh...
          Enfin de compte il y as un problème ^^

          Quand je clique tout en bas (Pas sur le hamac) l'action s'effectue quand même...
          Si une amélioration pouvait être apportez sa serais sympas merci à tous !
          • Partager sur Facebook
          • Partager sur Twitter
            28 avril 2006 à 23:53:56

            Salut M@zero, pourrez tu donner le code source actuel s'il te plait ?


            Merci d'avance ^^
            • Partager sur Facebook
            • Partager sur Twitter
              29 avril 2006 à 0:01:54

              Desolez Deceiver je viens trouvez la solution à mon problème..
              Je vais vous mettre mon code pour ceux qui cherche la solution ^^

              #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, *hamac = NULL;
                  int boucle1 = 1;
                  SDL_Rect positionHamac;
                  SDL_Event event;

                  SDL_Init(SDL_INIT_VIDEO);

                  ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                  SDL_WM_SetCaption("MonTest", NULL);
                  hamac = IMG_Load("hamac.gif");

                  SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                  positionHamac.x = 340;
                  positionHamac.y = 240;
                  SDL_BlitSurface(hamac, NULL, ecran, &positionHamac);
                 
                 

                 

                 
                 
                 
                  while (boucle1)/* Menu principal*/
                  {
                      SDL_WaitEvent(&event);
                      switch(event.type)
                      {
                          case SDL_QUIT:
                              boucle1 = 0;
                          break;
                          case SDL_MOUSEBUTTONUP:
                          if (event.button.button == SDL_BUTTON_LEFT)
                          {
                          if (event.motion.x > positionHamac.x && event.motion.x < positionHamac.x + 116 && event.motion.y > positionHamac.y && event.motion.y < positionHamac.y + 117 )
                          {
                          boucle1 = 0;
                          }
                          }
                         
                      }
                  SDL_Flip(ecran);
                  }
                 
                 
                 
                  SDL_FreeSurface(hamac);
                  SDL_Quit();

                  return EXIT_SUCCESS;
              }


              Encore merci à tous ! ;)
              • Partager sur Facebook
              • Partager sur Twitter
                29 avril 2006 à 0:07:37

                ohh tu n'as pas à être désolé :)

                Mais il y a un petit problème avec la troisième Directive de Préprocesseur (en tout cas avec Dev-C++)

                Bizard ...
                • Partager sur Facebook
                • Partager sur Twitter
                  29 avril 2006 à 0:27:56

                  Citation : m@zero


                  Si une personne ayant trouvé le problème à ma solution pouvait m'aidé se serait sympa... ^^



                  Un problème à ta solution :p
                  Sinon, les couleurs flashy, comme ça, tu arrives à lire sans te crever les yeux ? oO

                  ++
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    29 avril 2006 à 8:49:18

                    positionHamac.x + 116

                    Tu pourrais remplacer par cela :

                    positionHamac.x + hamac->h

                    Si tu change les dimensions de l'image, tu ne devra pas recalculer les positions.

                    Sinon, je ne vois pas bien ou est ton erreur
                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 avril 2006 à 9:44:13

                      Merci à tous !
                      Mon problème s'est résolus grace à vous...

                      Amicalement M@zero
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Evenement en un seul clique !

                      × 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