Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL problème souris

Sujet résolu
    12 juillet 2006 à 10:20:27

    J'ai créer un programme contenant 2 boutons, +rouge, moins rouge et un carré changant de couleur selon la valeur de la variable rouge. Si j'appuye sur les flèches haut et bas, cela augmente/diminuer le rouge de mon carré. Maintenant j'ai essayé de faire la même chose avec mes boutons. Mais la rien ne change :S. J'ai testé si le clique sur les boutons était reconnu, en rajoutant un

    "continuer=0; si clique sur bouton +rouge" de même pour le - rouge, et cela fonctionne... Par contre le rouge+=2 et rouge -=2 pour modifier la valeur du rouge de mon carré ne bouge pas. Quelqe'un peut il m'aider?

    Voici mon code :

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



    int main(int argc, char *argv[])
    {

        int rouge =0, bleu =0, vert=0;
        SDL_Surface *ecran = NULL,*carrer = NULL,*rougeplus = NULL,*rougemoins = NULL;
        SDL_Event event;
        int continuer = 1;
        SDL_Rect position;
        SDL_Rect position_rouge_moins;
        SDL_Rect position_rouge_plus;
        SDL_Init(SDL_INIT_VIDEO);

        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Gestion des évènements en SDL", NULL);
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));

        // notre carré changant de couleur
        carrer = SDL_CreateRGBSurface(SDL_HWSURFACE, 110, 100, 32, 0, 0, 0, 0);
        position.x = 250;
        position.y = 300;
        SDL_BlitSurface(carrer, NULL, ecran, &position);
        SDL_EnableKeyRepeat(10, 10); // autoriser répétition touches

        rougeplus = SDL_LoadBMP("rouge_plus.bmp"); // boutons + et - de rouge
        position_rouge_plus.x = 10;
        position_rouge_plus.y = 20;
        SDL_BlitSurface(rougeplus, NULL, ecran, &position_rouge_plus);
        rougemoins = SDL_LoadBMP("rouge_moins.bmp");
        position_rouge_moins.x = 70;
        position_rouge_moins.y = 20;
        SDL_BlitSurface(rougemoins, NULL, ecran, &position_rouge_moins);

        SDL_Flip(ecran); //maj ecran

        while (continuer)
        {
            SDL_WaitEvent(&event); /* On attend un évènement qu'on récupère dans event */
            switch(event.type) /* On teste le type d'évènement */
            {
                case SDL_QUIT: /* Si c'est un évènement QUITTER */
                    continuer = 0; /* On met le booléen à 0, donc la boucle va s'arrêter */
                    break;

    case SDL_MOUSEBUTTONUP:

            if (event.button.button == SDL_BUTTON_LEFT)// si clique souris gauche
            {
                //si le clique ce trouve dans la surface du bouton +rouge
               if  ( event.button.x >10 && event.button.x < 60 && event.button.y >
     20 && event.button.y < 45)
               {
        if (rouge < 255)//rouge +
        {

        rouge+=2;

        }
         }
            //si le clique ce trouve dans la surface du bouton -rouge
            if ( event.button.x >70 && event.button.x < 110 && event.button.y >
     20 && event.button.y < 45)
                {
        if (rouge > 1)//rouge -
        {

        rouge-=2;
        }
         }

            }

    break;
                case SDL_KEYDOWN:
                switch (event.key.keysym.sym)
    {
        case SDLK_ESCAPE:// on arrête le programme
            continuer = 0;
            break;
        case SDLK_BACKSPACE: // mettre le rouge à zéro

           rouge=255;

            break;


        case SDLK_UP: //rouge +
        if (rouge > 1)
        {

        rouge-=2;

        }
            break;

            case SDLK_DOWN: // rouge -
            if (rouge < 255)
            {
            rouge+=2;

            }


            break;

    }
        // maj de notre carré changant de couleur
        SDL_FillRect(carrer, NULL, SDL_MapRGB(ecran->format, rouge, vert, bleu));
        SDL_BlitSurface(carrer, NULL, ecran, &position);
        SDL_Flip(ecran); // maj de notre carré changant de couleur

            }
        }
        SDL_FreeSurface(carrer); // libération des surfaces
        SDL_FreeSurface(rougeplus);
        SDL_FreeSurface(rougemoins);
        SDL_Quit();

        return EXIT_SUCCESS;
    }
    • Partager sur Facebook
    • Partager sur Twitter

    SDL problème souris

    × 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