Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] Probleme avec le texte

Sujet résolu
    7 octobre 2007 à 22:37:58

    Bonsoir,

    J'ai un probleme avec la fonction censé creer du texte sur une surface, ca ne m'indique pas d'érreur et le jeu se lance bien mais au moment de la fonction ca plante voile le code :

    1. texte = TTF_RenderText_Blended(akbar, nomeArme(joueur.arme), blanc); // On crée le texte de l'arme


    texte est utilisé avant mais je le vide tout le temps et voila nomeArme(); :
    1. char nomeArme(long noArme)
    2. {
    3.         char *noms[]={"Poing","Revolver","Taser","Mini Gun","",""};
    4.         return noms[noArme];
    5. }


    Pourquoi ca ne fonctionne pas ?
    Pouvez vous m'aidez ?
    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      7 octobre 2007 à 23:04:56

      ta fonction nomeArme renvoie un char.
      Fait lui renvoyer un char* :)

      Ensuite, par sécurité, déclare ton tableau en static :

      1. char* nomeArme(long noArme)
      2. {
      3.         static char *noms[]={"Poing","Revolver","Taser","Mini Gun","",""};
      4.         return noms[noArme];
      5. }


      En effet, tu renvoie un pointeur sur un tableau déclaré en local, il ne faut pas que ce tableau soit écrasé lorsque tu sors de la fonction : static est une solution pour éviter cela.
      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        7 octobre 2007 à 23:10:21

        Salut, merci ca marche, par contre est ce que tu pourrais m'aider pour un autre probleme avec la transparence ?
        Voila la ligne qui plante :
        1. heroForme = SDL_LoadBMP("heroTenueGuerre"); // On charge toute les formes du héro
        2.         SDL_SetColorKey(heroForme, SDL_SRCCOLORKEY, SDL_MapRGB(heroForme->format, 100, 175, 150));


        pareil, le jeu demarre mais arrivée a la fonction ca plante...
        • Partager sur Facebook
        • Partager sur Twitter
          7 octobre 2007 à 23:16:27

          1. SDL_LoadBMP("heroTenueGuerre");

          Jolie l'extension de ton image ;)
          • Partager sur Facebook
          • Partager sur Twitter
            7 octobre 2007 à 23:20:47

            Ah oui c'est un type que j'ai inventé :) hem... :honte:
            • Partager sur Facebook
            • Partager sur Twitter
              7 octobre 2007 à 23:24:05

              teste si ta variable heroForme est a NULL ou non avant de continuer !
              Si elle est a NULL, alors c'est le plantage assuré !
              et ça veut dire que ton image a charger n'a pas été trouvée
              • Partager sur Facebook
              • Partager sur Twitter

              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                7 octobre 2007 à 23:29:05

                Citation : Fvirtman

                teste si ta variable heroForme est a NULL ou non avant de continuer !
                Si elle est a NULL, alors c'est le plantage assuré !
                et ça veut dire que ton image a charger n'a pas été trouvée



                Pour ma part je trouve ça long comme méthode car il faudrait le faire pour chaque instructions SDL et vérifier dans le stdout.txt. Parcontre lors de bug, c'est vivement conseillé :)
                • Partager sur Facebook
                • Partager sur Twitter
                  7 octobre 2007 à 23:32:13

                  Et justement, idéalement, ce qu'il faut faire, c'est ne pas avoir une liste interminable de "LoadImage"
                  Il est évident que si tu as une longue liste de LoadImage, alors oui, tester les valeurs de retour a NULL, une par une, c'est long.

                  Mais !!
                  Si tu factorises un peu, déja, tu peux éviter d'avoir une colonie de "LoadImage", et/ou sinon, si les images chargées sont dans un tableau, il est facile, avec un seul for, de faire une boucle pour tester toutes les images chargées en 2 lignes ! :)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                    7 octobre 2007 à 23:42:10

                    Citation : Fvirtman

                    Et justement, idéalement, ce qu'il faut faire, c'est ne pas avoir une liste
                    Si tu factorises un peu, déja, tu peux éviter d'avoir une colonie de "LoadImage", et/ou sinon, si les images chargées sont dans un tableau, il est facile, avec un seul for, de faire une boucle pour tester toutes les images chargées en 2 lignes ! :)



                    C'est ce que je fais, juste un peu de logique dans le nom des sprites et voilà.
                    Pour ceux que ça intéresse:

                    1. void initialisationSprites(SDL_Surface *surface[][3], char *perso, long nbAnimation, long nbDeSpriteParAnim)
                    2. {
                    3.     size_t i = 0, j = 0;
                    4.     char chaine[200];
                    5.     /* On attache chaque surface à une image et on vire le fond */
                    6.     for(i = 0; i <= nbAnimation - 1; i++)
                    7.     {
                    8.         for(j = 0; j <= nbDeSpriteParAnim - 1; j++)
                    9.         {
                    10.             sprintf(chaine, "sprites/%s_%d_%d.bmp",perso,i,j);
                    11.             surface[i][j] = IMG_Load(chaine);
                    12.             SDL_SetColorKey(surface[i][j], SDL_SRCCOLORKEY, SDL_MapRGB(surface[i][j]->format, 32, 156, 0));
                    13.         }
                    14.     }
                    15. }
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 octobre 2007 à 23:51:49

                      d'acc !!
                      Donc la, tu n'as qu'un seul if a mettre, qui teste si surface[i][j] n'est pas NULL, sinon, tu lances une exeption, un printf ou une messageBox :)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                        7 octobre 2007 à 23:58:14

                        Exact, rapide et puissant: j'adore. :p

                        Sur ce, bonne nuit à toi (et au passage merci pour ta réponse sur mon topic, j'irai voir quand j'aurai l'esprit plus clair qu'à cette heure ci). :)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [SDL] Probleme avec le texte

                        × 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