Partage
  • Partager sur Facebook
  • Partager sur Twitter

pb avec le gestion des evenements

    9 mai 2006 à 20:29:09

    Bonjour,

    Dans le cours sur la gestion des événements, à la fin, un exercice propose d'afficher un zozor à chaque clic de souris et ce avec un maximum de 10 zozor.

    J'y suis presque arrivé mais au 2e clic de souris et uniquement au 2e, un zozor apparait en haut à gauche en plus de celui qui devait apparaitre normalement (du au clic de souris). Mais je n'arrive pas à voir où est mon erreur. Pourriez-vous m'aider.

    Merci.
    Voici le code :

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

    int main(int argc, char *argv[])
    {
    SDL_Surface *ecran = NULL, *zozor = NULL;
    SDL_Rect positionZozor[10];
    int continuer = 1, nbZozor = 0, pos = 0;
    SDL_Event event;


    SDL_Init(SDL_INIT_VIDEO);

    SDL_WM_SetIcon(IMG_Load("sdl_icone.bmp"), NULL);
    ecran = SDL_SetVideoMode(900, 800, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    SDL_WM_SetCaption("Exercice SDL", NULL);
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));

        zozor = IMG_Load("zozor.bmp");
        SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));

        for(pos=0; pos<10; pos++)//toutes les positions de tous les zozor sont mises a -100 pour ne pas les voir
        {
            positionZozor[pos].x = -100;
            positionZozor[pos].y = -100;
        }

        while(continuer)//debut de la boucle des evenements
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                break;

                case SDL_MOUSEBUTTONDOWN:

                    if (nbZozor<10)//on n'affiche que 10 zozor
                    {
                        positionZozor[nbZozor].x = event.button.x;// on recupere la position de la souris que l'on met dans le position de zozor
                        positionZozor[nbZozor].y = event.button.y;

                        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));

                        for(pos=0; pos<10; pos++)//on affiche les 10 derniers zozor
                        {
                            SDL_BlitSurface(zozor, NULL, ecran, &positionZozor[pos]);
                        }
                        nbZozor++;//on passe au zozor suivant
                    }
                    else
                    {
                       nbZozor = 0;
                    }
                break;

                case SDL_KEYDOWN:
                    switch (event.key.keysym.sym)
                    {
                        case SDLK_DELETE:
                             for(pos=0; pos<10; pos++)
                             {
                                 positionZozor[pos].x = -100;
                                 positionZozor[pos].y = -100;
                             }
                             SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
                        break;
                    }
                break;

            }

        SDL_Flip(ecran);
        }

        SDL_FreeSurface(zozor);
        SDL_Quit();
        return EXIT_SUCCESS;
    }
    • Partager sur Facebook
    • Partager sur Twitter

    pb avec le gestion des evenements

    × 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