Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] charge dédiée de la mémoire explose

    26 juin 2007 à 14:33:35

    EDIT DU MESSAGE CAR BUG TROUVE

    Maintenant j'ai besoin de votre aide, car j'ai remarqué qu'en utilisant des lignes du genre :

    decor = IMG_Load("tiles/arbre1.png");


    en plein milieu d'une boucle, cela a pour effet de faire grossir la mémoire utilisé à chaque seconde.

    Cependant j'aimerais bien pouvoir modifier l'apparence d'une des surfaces lorsqu'une souris passe dessus par exemple ou pour animer une image sans pour autant devoir créer une liste infini de surface.

    Donc comment faire face à ce problème ?

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      26 juin 2007 à 14:43:36

      fuite mémoire...
      peut-être une allocation pas libérée.
      • Partager sur Facebook
      • Partager sur Twitter
        26 juin 2007 à 20:37:25

        Problème trouvé... lire le premier post en attente d'une solution
        • Partager sur Facebook
        • Partager sur Twitter
          26 juin 2007 à 20:45:46

          Les balises codes stp.
          • Partager sur Facebook
          • Partager sur Twitter
            27 juin 2007 à 8:35:16

            voilà qui est fait, desolé je n'avais pas remarqué cette possibilité
            • Partager sur Facebook
            • Partager sur Twitter
              27 juin 2007 à 10:40:48

              Et bien tu fais un SDL_FreeSurface dès que tu n'as plus besoin de l'image.
              • Partager sur Facebook
              • Partager sur Twitter
                27 juin 2007 à 11:02:59

                TU charges tes images en début de programme et tu te contente simplement de les afficher ;) au moins t'as pas à les charger/libérer 200 fois si l'utilisateur passe 200 fois sur la zone :)
                • Partager sur Facebook
                • Partager sur Twitter
                  27 juin 2007 à 17:38:26

                  non en fait vous avez pas compris.

                  Evidemment je charge la plus part des images en début avant la boucle et libère la totalité des surfaces.

                  Cependant pour eviter de créer 1000 surfaces pour en utiliser 10 au hasard (selon les maps à charger).

                  j'utilisais un truc tout simple, au milieu du programme je changais le lien de l'image pour une seule surface, chargé l'image, passé à la suivante et ainsi de suite. Ainsi j'avais une surface pour plusieurs aperçu differents.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 juin 2007 à 18:05:22

                    Oui j'ai rien compris.
                    Poste le code.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 juin 2007 à 19:45:16

                      Pour eviter de mettre des centaines de lignes, je vais faire un exemple tout bête :


                      while (continuer)
                      {
                      if (variable == 1)
                      decor = IMG_Load("tiles/arbre1.png");
                      if (variable == 2)
                      decor = IMG_Load("tiles/arbre2.png");
                      ... (imaginons que la variable propose 100 possibilités voir plus).

                      Blitsurface decor...

                      }


                      A savoir cette boucle s'effecturait sur 500 cases environ.

                      J'utilise aussi cette technique pour modifier l'affichage d'un bouton lorsque la souris passe au dessus ou clic.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 juin 2007 à 20:45:29

                        c'est pas top mais bon :p mets un SDL_FreeSurface(decor); avant la fin de ta boucle continuer
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [SDL] charge dédiée de la mémoire explose

                        × 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