SDL_SetAlpha

Jackyzgood Messages postés 26 Date d'inscription mercredi 17 septembre 2008 Statut Membre Dernière intervention 6 mars 2010 - 14 oct. 2008 à 19:41
GurneyH Messages postés 6 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 24 octobre 2008 - 16 oct. 2008 à 14:56
Bonjour à Tous !

Ma question est simple : est ce que la fonction SDL_SetAlpha, fonctionne avec les surfaces créées avec TTF_RenderText ?

Mon but est de rendre un texte partiellement transparent, mais je n'ai aucun résultat avec SDL_SetAlpha ....

Merci d'avance.

3 réponses

GurneyH Messages postés 6 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 24 octobre 2008
15 oct. 2008 à 12:18
Salut,
   
   Oui ça marche... Je te propose une petite fonction

   void drawOnScreenAlpha (string text,int x,int y,Uint8 alpha,SDL_Color foreground)
   {
       SDL_Surface* txtsrf;
       SDL_Rect outRect;

        txtsrf=TTF_RenderText_Solid(font,text.c_str(),foreground);

         SDL_SetAlpha(txtsrfn SDL_SRCALPHA,SDL_RLEACCEL,alpha);
         
          outRect.x=x;
          outRect.y=y;

           SDL_BlitSurface(txtsrf,NULL,SDL_GetVideoSurface(),&outrect);
           SDL_FreeSurface(txtsrf);
      }


a++
0
Jackyzgood Messages postés 26 Date d'inscription mercredi 17 septembre 2008 Statut Membre Dernière intervention 6 mars 2010
15 oct. 2008 à 19:11
Merci pour cette réponse, j'essayerais le code un peu plus tard.

Pourrais je avoir une petite explication ? Car je suis encore dans la catégorie noob ... :p

   void drawOnScreenAlpha (string text,int x,int y,Uint8 alpha,SDL_Color foreground)
   {
       SDL_Surface* txtsrf;
       SDL_Rect outRect;

//jusque la pas de probleme

        txtsrf=TTF_RenderText_Solid(font,text.c_str(),foreground);

// quelle est l'interet de rajouter c_str() apres la variable texte ?

         SDL_SetAlpha(txtsrfn SDL_SRCALPHA,SDL_RLEACCEL,alpha);

// txtsrfn ?? c'est une faute de frappe ?? car si j'ai bien compris la surface est : txtsrf

//quelle est la fonction de SDL_RLEACCEL ?
        
          outRect.x=x;
          outRect.y=y;

           SDL_BlitSurface(txtsrf,NULL,SDL_GetVideoSurface(),&outrect);

//SDL_GetVideoSurface(), premiere fois que je le vois celui la, c'est juste le nom de la //surface qui correspond a l'ecran ou ca a quelque chose en plus ?

           SDL_FreeSurface(txtsrf);
      }

En tout cas merci
0
GurneyH Messages postés 6 Date d'inscription mardi 14 octobre 2008 Statut Membre Dernière intervention 24 octobre 2008
16 oct. 2008 à 14:56
   Salut, 

   Alors,

      pour c_str():
         
         -dans la fonction drawOnScreen, le paramètre text, est de type string. Dans la fonction TTF_RenderText, le second paramètre reçoit un argument de type char*... c_str() permet de convertir notre string en char*.

         -Pour txtsrfn, c'est bien une faute de frappe...( j'ai les doigts crochus...).

         -Le flag SDL_RLEACCEL indique à SDL que l'on veut utiliser l'accélaration RLE pour les blits. Par défaut, met le toujours...
         
           Rapidement,RLE est un système de compression qui remplace une série de valeur (par exemple 100 valeur 0 à la suite), par le nombre de répitition suivi de la valeur...


         -Pour SDL_GetVideoSurface, tu as vu juste, c'est bien la surface qui correspond à l'écran... Ca évite de passer cette surface en paramètre quand on désire seulement blitter sur l'écran...

a++
0
Rejoignez-nous