SDL_SetAlpha

Signaler
Messages postés
26
Date d'inscription
mercredi 17 septembre 2008
Statut
Membre
Dernière intervention
6 mars 2010
-
Messages postés
6
Date d'inscription
mardi 14 octobre 2008
Statut
Membre
Dernière intervention
24 octobre 2008
-
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

Messages postés
6
Date d'inscription
mardi 14 octobre 2008
Statut
Membre
Dernière intervention
24 octobre 2008

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++
Messages postés
26
Date d'inscription
mercredi 17 septembre 2008
Statut
Membre
Dernière intervention
6 mars 2010

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
Messages postés
6
Date d'inscription
mardi 14 octobre 2008
Statut
Membre
Dernière intervention
24 octobre 2008

   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++