Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction pause en SDL

Impossible de redémarrer...

Sujet résolu
    8 juillet 2006 à 14:57:12

    Bonjour.

    Je suis en train de créer un petit jeu en SDL et j'aimerais y implenter une fonction qui permet de mettre le programme en pause.
    J'arrive à le mettre en pause mais pas à le faire repartir...

    En fait, dès que j'appuie sur "p", le timer s'arrête comme prévu, l'affichage du temps aussi mais tout reste comme ça.
    D'après stdout.txt, une fois que la fonction pause est lancée, elle se répète en boucle. Et si je réappuie sur "p" pour arrêter la mise en pause, je vois dans stdout que je suis bien entré dans la condition et sorti de la fonction mais elle se relance toute seule.

    Voici mon code, j'y ai ajouté des printf pour comprendre ce qui n'allait pas.
    La fonction:
    Uint32 pause(SDL_TimerID* timer, Uint32 intervalle, void* params)
    {
        SDL_Event pevent;
        SDL_TimerID newTimer;
        int continuer = 1;
        Uint32 debut_pause = 0, fin_pause = 0;

        debut_pause = SDL_GetTicks();

        SDL_RemoveTimer(*timer);

        printf(">> 1");

        while(continuer)
        {
            printf(">> 2");
            SDL_WaitEvent(&pevent);
            printf(">> 3");

            if ((pevent.type == SDL_KEYDOWN) && (pevent.key.keysym.sym == SDLK_p))
                continuer = 0;
        }

        newTimer = SDL_AddTimer(intervalle, descendrePiece, params);
        fin_pause = SDL_GetTicks();
        printf(">> 4");

        return (fin_pause - debut_pause); // Temps de la pause en milisecondes
    }


    L'appel de la fonction:
    case SDLK_p:
        temps_debut += pause(&timer, intervalle, &params);
        printf(">> 5");
        break;


    Le fichier stdout:

    Citation : stdout.txt

    >> 1>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 4>> 5>> 1>> 2>> 3>> 2>> 3>> 4>> 5>> 1>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 4>> 5>> 1>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 4>> 5>> 1>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2>> 3>> 2


    Je ne vois vraiment pas où est le problème, pourquoi la fonction se répète en boucle? o_O

    Merci d'avance.

    Edit
    J'ai ajouter un bout de code pour pouvoir quitter:
    /*...*/
    SDL_WaitEvent(&pevent);

    if (pevent.type == SDL_QUIT)
        exit(EXIT_SUCCESS);

    if ((pevent.type == SDL_KEYDOWN) && (pevent.key.keysym.sym == SDLK_p))
        continuer = 0;
    /*...*/

    La fonction exit s'exécute correctement, donc comme je disait la fonction à l'air de fonctionner plus ou moins mais elle se répète en boucle.
    • Partager sur Facebook
    • Partager sur Twitter
      8 juillet 2006 à 18:44:11

      Essaye en rajoutant un WaitEvent aprés l'appel de Pause(...);

      J'ai déja eu ce buget je l'ai resolut radicalement en traitant TOUT(c'est important ) mes evenement avec switch(pevent)

      Explication: la variable qui contient p lorsque tu apelle pause(...); contient toujour p et donc sa relance la pause
      • Partager sur Facebook
      • Partager sur Twitter
        9 juillet 2006 à 11:47:13

        Merci beaucoup ça fonctionne en rajoutant SDL_WaitEvent où tu l'as dit.
        • Partager sur Facebook
        • Partager sur Twitter

        Fonction pause en SDL

        × 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