Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL]Zozor en pause

    15 juin 2006 à 13:22:45

    Bonjour ^^

    Je suis sur la partie 'Maîtrisez le temps !', Mateo21 me propose une amélioration pour m'entraîner: celle où lorsqu'on appuie sur P, Zozor s'arrête. Lorsqu'on réappuie sur P, il doit recommencer à se déplacer. Or, pour que Zozor recommence à se déplacer, il faut que j'appuie sur P tout en bougeant la souris pendant 3 ou 4 secondes... J'ai pas envie de bouger la souris à chaque fois o_O

    Voilà mon code :


    #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;

        SDL_Init(SDL_INIT_VIDEO);
        ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Zozor", NULL);

        zozor = SDL_LoadBMP("zozor.bmp");
        SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));
        SDL_Rect positionZozor;
        positionZozor.x = (ecran->w - zozor->w) / 2;
        positionZozor.y = (ecran->h - zozor->h) / 2;
        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
        SDL_Flip(ecran);

        SDL_Event event;
        int continuer = 1, versLaDroite = 1, versLeBas = 1, stopZozor = 0; //Variables de déplacement de Zozor + celle de pause
        int tempsPrecedent = 0, tempsActuel = 0;
        while (continuer)
        {
            tempsActuel = SDL_GetTicks();
            if (tempsActuel - tempsPrecedent > 25)
            {
                if(!stopZozor)
                {
                    if (versLaDroite)
                    {
                        if (positionZozor.x < ecran->w - zozor->w)
                            positionZozor.x++;
                        else
                            versLaDroite = 0;
                    }
                    else
                    {
                        if (positionZozor.x > 0)
                            positionZozor.x--;
                        else
                            versLaDroite = 1;
                    }

                    if (versLeBas)
                    {
                        if (positionZozor.y < ecran->h - zozor->h)
                            positionZozor.y++;
                        else
                            versLeBas = 0;
                    }
                    else
                    {
                        if (positionZozor.y > 0)
                            positionZozor.y--;
                        else
                            versLeBas = 1;

                    }
                    tempsPrecedent = tempsActuel;
                }

            }
            else
            {
                SDL_Delay(25 - (tempsActuel - tempsPrecedent));
            }

            SDL_PollEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;

                case SDL_KEYDOWN:
                    if(event.key.keysym.sym == SDLK_p)  // C'est ici que ça pêche !
                        stopZozor = !stopZozor;
                    break;

            }

            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
            SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
            SDL_Flip(ecran);

        }

        SDL_FreeSurface(zozor);
        SDL_Quit();

        return EXIT_SUCCESS;

    }
    • Partager sur Facebook
    • Partager sur Twitter

    [SDL]Zozor en pause

    × 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