Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec SDL_QUIT

Sujet résolu
    10 avril 2006 à 19:39:53

    Salut à tous,

    voilà dans mon jeu, j'ai en evénement possible le fait que l'on presse la touche echap pour quitter le programme ça ça marche, j'ai aussi l'évèneemnt SDL_QUIT pour quitter si on clique sur la croix mais là ça marche pas, il met le programme en "pause" ou du moins plus rien de se passe genre plantage car il faut faire ctrl alt suppr pour quitter... alors que j'ai pris directement les 3 malheureuses lignes de codes de mes autre programme (sur Zozor par exemple) où là ça marche à merveille...

    case SDL_KEYDOWN :
    switch(event.key.keysym.sym)
    {
    case SDLK_ESCAPE :
    continuer=0;
    break;

    alors ? des idées ?
    d'ailleurs, comment vous faites pour coler votre code dans une sous fenêtre dans le forum parce que là c'est pas beau du tout !
    Merci beaucoup...
    • Partager sur Facebook
    • Partager sur Twitter
      10 avril 2006 à 19:51:04

      La partie que tu montre m'a l'air bonne, si tu as bien un SDL_Event appelé event, et une boucle qui continue tant que continuer n'est pas nul, maintenant montre le reste du code pour qu'on puisse trouve le problème, au moins le reste du switch...
      Pour la "sous fenêtre", tu utilise le Zcode:
      <*code type="c">/* Ici ton code */</*code>
      Mais sans le * à code parceque ça plante si on veut formater un code en zcode avec une balise code dedans...
      • Partager sur Facebook
      • Partager sur Twitter
        10 avril 2006 à 20:03:37

        ok, alors ce code est secret défense car c'est une partie de mon tout premier jeu à moi tout seul alors chut !


        SDL_PollEvent(&event);
                            switch(event.type)
                            {
                              case SDL_QUIT :
                                continuer=0;
                                break;
                                               
                              case SDL_KEYDOWN :
                                switch(event.key.keysym.sym)
                                {
                                  case SDLK_ESCAPE :
                                    continuer=0;
                                    break;
                                  case SDLK_UP :
                                    avhaut=1;
                                    break;
                                  case SDLK_DOWN :
                                    avbas=1;
                                    break;
                                  case SDLK_LEFT :
                                    avgauche=1;
                                    break;
                                  case SDLK_RIGHT :
                                    avdroite=1;
                                    break;
                                  case SDLK_SPACE :
                                    if(posprojectile[j].x==-1)
                                    {
                                      posprojectile[j].x=posavion.x+avion->w/2;
                                      posprojectile[j].y=posavion.y;
                                      j++;
                                    }
                                    if(j==9)j=0;   
                                    break;                     
                                }
                                break;
                              case SDL_KEYUP :
                                switch(event.key.keysym.sym)
                                {
                                  case SDLK_UP :
                                    avhaut=0;
                                    break;
                                  case SDLK_DOWN :
                                    avbas=0;
                                    break;
                                  case SDLK_LEFT :
                                    avgauche=0;
                                    break;
                                  case SDLK_RIGHT :
                                    avdroite=0;
                                    break;
                                }
                              break;
                            }


        voilà pour le switch... après y a encore d'autres calculs avant la fin de la boucle bien sur...

        Merci...
        • Partager sur Facebook
        • Partager sur Twitter
          10 avril 2006 à 20:09:04

          Je vois pas d'erreur, désolé... Mais bon je vois pas tout non plus ^^
          Par contre pour débugger fait ça à grand coup de printf un peu partout dans le code pour voire si le programme lit bien jusqu'à l'endroit machin, après tu lis stdout.txt pour voir tout ça...
          • Partager sur Facebook
          • Partager sur Twitter
            10 avril 2006 à 20:19:40

            Bon j'ai fait des test en retirant des bouts de code après le switch (qui n'a pas de raison d'être faux...)

            apparement c'est ma gestion du temps de repos du programme qui fait le fait planter quand on clic sur la croix...

            qu'est ce qui ne va pas dans :

            SDL_Flip(ecran);
            temps=SDL_GetTicks()-temps;
            if(50-temps>0) SDL_Delay(50-temps);
            }


            parce ce que si je retire la dernière commande, le jeu s'arrête bien quand on clic (mais par contre il tourne beaucoup trop vite bien sur !)
            Ce qui m'étonne c'est que la touche echap permet bien de quitter le programme...
            merci

            EDIT : HHAAAAAA, 2h de plus à tester des trucs, de bidules, sur d'autres programmes,etc,etc et toujours pas la solution... les joies du programmeurs ! mais si un big boss pouvait se pencher sur ce cas ... merci beaucoup !
            • Partager sur Facebook
            • Partager sur Twitter
              11 avril 2006 à 18:30:02

              bon voilà j'ai trouver une solution...

              if(attendre>0 && continuer) SDL_Delay(attendre);


              ça me permet de ne pas endormir mon programme si on veut quitter et ça marche... même si je sais toujours pas pourquoi ça plantait avant !!!
              • Partager sur Facebook
              • Partager sur Twitter

              Problème avec SDL_QUIT

              × 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