Partage
  • Partager sur Facebook
  • Partager sur Twitter

Une fonction entrerTexte

j'en fai fait une simple mais elle ne marche pas

    5 août 2007 à 19:43:19

    );
               
               surfaceTexte = TTF_RenderText_Blended(police, chaineRetour, couleurTexte);
               
               
               /*position.x = (LARGEUR - surfaceTexte->w)/2,
               position.y += (int)1.5*taillePolice;*/

               SDL_BlitSurface(surfaceTexte, NULL, ecran, &position);
               
               cout << surfaceTexte->w << endl;
               
               SDL_Flip(ecran);
       
        }

        TTF_CloseFont(police);
        SDL_FreeSurface(surfaceTitre);
        SDL_FreeSurface(surfaceTexte);
        SDL_FreeSurface(dessus);
       
    }
     

    Le code en commentaire à la fin de la fonction est le code que je voudrais mettre normalement mais à partir du moment où je me sers de la valeur de surfaceTexte->w, j'ai une erreur de segmentation qui se produit à l'execution du programme.
    Je ne comprends vraiment pas où est mon erreur, et je vous demande de me venir en aide si vous avez une idée parce que là je bloque...
    Merci d'avance !>(police, titre.c_str(), couleurTexte);
        SDL_Event event;
        bool continuer=true;
        bool toucheEnfoncee=false;
        int compteur=0;
        SDL_Rect position;
        while(continuer)
        {
               SDL_WaitEvent(&event);
               switch(event.type)
               {
                                 case SDL_KEYUP:
                                      toucheEnfoncee=false;
                                      break;
                                 case SDL_KEYDOWN:
                                      switch(event.key.keysym.sym)
                                      {
                                              case SDLK_q:
                                                   if(!toucheEnfoncee)
                                                   {
                                                       chaineRetour[compteur]='a';
                                                       compteur++;
                                                       chaineRetour[compteur]='\0';
                                                   }
                                                   toucheEnfoncee=true;
                                                   break;
                                              case SDLK_w:
                                                   if(!toucheEnfoncee)
                                                   {
                                                       chaineRetour[compteur]='z';
                                                       compteur++;
                                                       chaineRetour[compteur]='\0';
                                                   }
                                                   toucheEnfoncee=true;
                                                   break;
                                              case SDLK_e:
                                                   if(!toucheEnfoncee)
                                                   {
                                                       chaineRetour[compteur]='e';
                                                       compteur++;
                                                       chaineRetour[compteur]='\0';
                                                   }
                                                   toucheEnfoncee=true;
                                                   break;
                                              case SDLK_r:
                                                   if(!toucheEnfoncee)
                                                   {
                                                       chaineRetour[compteur]='r';
                                                       compteur++;
                                                       chaineRetour[compteur]='\0';
                                                   }
                                                   toucheEnfoncee=true;
                                                   break;
                                             
    /*Je ne mets pas toutes les lettres vous aurez compris le principe*/



                                              case SDLK_c:
                                                   if(!toucheEnfoncee)
                                                   {
                                                       chaineRetour[compteur]='c';
                                                       compteur++;
                                                       chaineRetour[compteur]='\0';
                                                   }
                                                   toucheEnfoncee=true;
                                                   break;
                                              case SDLK_v:
                                                   if(!toucheEnfoncee)
                                                   {
                                                       chaineRetour[compteur]='v';
                                                       compteur++;
                                                       chaineRetour[compteur]='\0';
                                                   }
                                                   toucheEnfoncee=true;
                                                   break;
                                              case SDLK_b:
                                                   if(!toucheEnfoncee)
                                                   {
                                                       chaineRetour[compteur]='b';
                                                       compteur++;
                                                       chaineRetour[compteur]='\0';
                                                   }
                                                   toucheEnfoncee=true;
                                                   break;
                                              case SDLK_n:
                                                   if(!toucheEnfoncee)
                                                   {
                                                       chaineRetour[compteur]='n';
                                                       compteur++;
                                                       chaineRetour[compteur]='\0';
                                                   }
                                                   toucheEnfoncee=true;
                                                   break;
                                              case SDLK_KP_ENTER:
                                                   continuer=false;
                                                   break;
                                              case SDLK_RETURN:
                                                   continuer=false;
                                                   break;
                                              case SDLK_BACKSPACE:
                                                   if(!toucheEnfoncee && compteur>1)
                                                   {
                                                        compteur--;
                                                       
                                                        chaineRetour[compteur]='\0';
                                                       
                                                   }
                                                   break;
                                      }
                                      break;
               }
       
       
               position.x = (LARGEUR - dessus->w)/2;
               position.y = (HAUTEUR - dessus->h)/2;
               SDL_BlitSurface(dessus, NULL, ecran, &position);
               
               
               position.x = (LARGEUR - surfaceTitre->w)/2;
               position.y = (HAUTEUR - surfaceTitre->h)/2;
               SDL_BlitSurface(surfaceTitre, NULL, ecran, &position
    • Partager sur Facebook
    • Partager sur Twitter
      5 août 2007 à 22:23:14

      salut
      déjà pour tous les caracteres, tu as juste a dire:

      if (event.key.keysym.sym >= SDLK_a && event.key.keysym.sym <= SDLK_z)
         if(!toucheEnfoncee)
         {
           chaineRetour[compteur]=event.key.keysym.sym;
           compteur++;
           chaineRetour[compteur]='\0';
          }
         toucheEnfoncee=true;
         break;


      sinon pour ton probleme, vérifie les valeurs de retour !
      juste avant tes 2 lignes comentées, écris:

      cerr<<SDL_GetError()<<endl;
       
      • Partager sur Facebook
      • Partager sur Twitter
        5 août 2007 à 23:09:40

        Une erreur de segmentation lors de l'utilisation d'une surface c'est que ta surface n'est sûrement pas allouer !
        L'allocation a dût échouer dans la ligne qui précède les deux commentaire, vérifie que police chaineRetour et couleurTexte ne sont pas érroner, a mon avis c'est le cas &#59;&#41;


        PS : A part les cout il est ou le C++ la dedans ?
        Utilise au moins autre chose que les char*, std::string, ou std::vector si tu veut pas des string.
        • Partager sur Facebook
        • Partager sur Twitter

        Une fonction entrerTexte

        × 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