Texte en SDL

Voir le sujet précédent Voir le sujet suivant Aller en bas

Texte en SDL

Message par Julien le Ven 30 Mai - 23:03

Bonjour !

Voilà, je sais comment afficher une chaîne de caractères statique en SDL mais j'aurais voulu savoir comment on peut afficher une chaîne de caractères dynamique...

Si quelqu'un a la réponse, ça m'aidera bien !

Julien
Administrateur
Administrateur

Sexe:Masculin
Messages : 6120
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur

Feuille de personnage
Nombre de problèmes du mois résolus:
0/0  (0/0)

Revenir en haut Aller en bas

Re: Texte en SDL

Message par le_duche le Ven 30 Mai - 23:30

Je te poste ca si je le retrouve dans mon autre pc.
Duche
ERROR - No keyboard Connected. Press any key to continue...

le_duche
Membre
Membre

Sexe:Masculin
Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math

Feuille de personnage
Nombre de problèmes du mois résolus:
4/7  (4/7)

Revenir en haut Aller en bas

Re: Texte en SDL

Message par le_duche le Sam 31 Mai - 0:14

Tout d'abord, une classe qui gère les polices:

dans le .h
Code:

#ifndef uchar
typedef unsigned char uchar;
#endif

class PoliceTTF
{
  public:
    PoliceTTF(char*,int,bool,bool,bool);
    ~PoliceTTF();
 
  private:
    TTF_Font* font;
 
  friend void PrintSDLTTF(const PoliceTTF&,int,int,int,SDL_Surface*,int,int,char*,...);
  friend void WriteSDLTTF(const PoliceTTF&,int,int,int,SDL_Surface*,int,int,char*,int);
};


dans le .cpp
Code:

PoliceTTF::PoliceTTF(char* police,int taille,bool ital,bool gras,bool ssln)
{
  TTF_Init();
  font = TTF_OpenFont(police,taille);
  uchar flag=0;
  if(ital)
    flag |= TTF_STYLE_ITALIC;
  if(gras)
    flag |= TTF_STYLE_BOLD;
  if(ssln)
    flag |= TTF_STYLE_UNDERLINE;
  TTF_SetFontStyle(font,flag);
}

PoliceTTF::~PoliceTTF()
{
  TTF_CloseFont(font);
}


Une fonction pour faciliter les rectangles
Code:

inline SDL_Rect Rect(int x,int y,int w,int h)
{
  SDL_Rect r;
  r.x = x;
  r.y = y;
  r.w = w;
  r.h = h;
}


Une fonction de blit indispensable:
Code:

inline void Blit(SDL_Surface* source,int x1,int y1,int w,int h,SDL_Surface* dest,int x2,int y2)
{
  SDL_Rect s = Rect(x1,y1,w,h);
  SDL_Rect d = Rect(x2,y2,0,0);
  SDL_Rect* ps = &s;
  if (x1 < 0)
    ps = NULL;
  SDL_BlitSurface(source,ps,dest,&d);
}


Fonction permettant d'afficher du texte comme le printf (au point de vue des paramètres
Code:

void PrintSDLTTF(const PoliceTTF& police,int CouleurR,int CouleurG,int CouleurB,SDL_Surface* dest,int x,int y,char* text,...)
{
  char buf[300];
  va_list args;
  va_start(args,text);
  vsprintf(buf,text,args);
  va_end(args);
  SDL_Color couleur;
  couleur.r = CouleurR;
  couleur.g = CouleurG;
  couleur.b = CouleurB;
  SDL_Surface* TempTexte = TTF_RenderText_Solid(police.font,buf,couleur);
  if(TempTexte)
    Blit(TempTexte,0,0,TempTexte->w,TempTexte->h,dest,x,y);
  SDL_FreeSurface(TempTexte);
}
Duche
ERROR - No keyboard Connected. Press any key to continue...

le_duche
Membre
Membre

Sexe:Masculin
Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math

Feuille de personnage
Nombre de problèmes du mois résolus:
4/7  (4/7)

Revenir en haut Aller en bas

Re: Texte en SDL

Message par le_duche le Sam 31 Mai - 0:18

note: il faut include les librairies
SDL/SDL.h
sdl/sdl_ttf.h
windows.h
Duche
ERROR - No keyboard Connected. Press any key to continue...

le_duche
Membre
Membre

Sexe:Masculin
Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math

Feuille de personnage
Nombre de problèmes du mois résolus:
4/7  (4/7)

Revenir en haut Aller en bas

Re: Texte en SDL

Message par Julien le Sam 31 Mai - 8:34

Merci beaucoup le_duche, c'est exactement ce qu'il me faut !

Dommage que ce soit du C++ ! Je n'ai vu que le C pour le moment donc je ne connais pas encore le principe des classes par exemple. C'est quoi l'équivalent d'une classe en C ?

Julien
Administrateur
Administrateur

Sexe:Masculin
Messages : 6120
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur

Feuille de personnage
Nombre de problèmes du mois résolus:
0/0  (0/0)

Revenir en haut Aller en bas

Re: Texte en SDL

Message par le_duche le Sam 31 Mai - 14:37

Ca n'a pas d'équivalent !
Une classe c'est pour définir un type d'objet.

par exemple, tu veux te faire chauffer un hamburger. En C tu devras faire le cablâge et les soudures en fonction de ton temps de cuisson, de la température souhaitée. Tu pourra réutiliser ton câblage pour tous les hamburger que tu feras, mais si tu veux te faire chauffer une pizza, tu devras tout recommencer.
En C++ tu fabriques un micro-onde, et tu n'a plus qu'à régler l'interface à chaque utilisation.
Duche
ERROR - No keyboard Connected. Press any key to continue...

le_duche
Membre
Membre

Sexe:Masculin
Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math

Feuille de personnage
Nombre de problèmes du mois résolus:
4/7  (4/7)

Revenir en haut Aller en bas

Re: Texte en SDL

Message par le_duche le Sam 31 Mai - 14:43

Le C est dépassé maintenant. Les langages orientés objets sont devenu vraiment puissants, faut pas hésiter à les utiliser !!
Duche
ERROR - No keyboard Connected. Press any key to continue...

le_duche
Membre
Membre

Sexe:Masculin
Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math

Feuille de personnage
Nombre de problèmes du mois résolus:
4/7  (4/7)

Revenir en haut Aller en bas

Re: Texte en SDL

Message par Julien le Sam 31 Mai - 15:35

Ah... ! On va le voir l'an prochain et là, on n'a pas le droit de s'en servir ! Mais c'est rageant quand on voit la puissance du C++ par rapport au C d'après ta métaphore ! lol

Julien
Administrateur
Administrateur

Sexe:Masculin
Messages : 6120
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur

Feuille de personnage
Nombre de problèmes du mois résolus:
0/0  (0/0)

Revenir en haut Aller en bas

Re: Texte en SDL

Message par le_duche le Sam 31 Mai - 18:16

Ben disons que tout ce qui se fait en C++ peut théoriquement être traduit en C, mais c'est tellement plus propre avec les objets !!!

(je regarde si mon code peut facilement être traduit en C)
Duche
ERROR - No keyboard Connected. Press any key to continue...

le_duche
Membre
Membre

Sexe:Masculin
Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math

Feuille de personnage
Nombre de problèmes du mois résolus:
4/7  (4/7)

Revenir en haut Aller en bas

Re: Texte en SDL

Message par le_duche le Sam 31 Mai - 18:27

Voila, ceci devrait remplacer mon objet je pense.

Code:

#ifndef uchar
typedef unsigned char uchar;
#endif

struct PoliceTTF
{
  TTF_Font* font;
};

struct PoliceTTF CreateNewPolice(char* police,int taille,bool ital,bool gras,bool ssln)
{
  TTF_Init();
   struct PoliceTTF new_police;
  new_police.font = TTF_OpenFont(police,taille);
  uchar flag=0;
  if(ital)
    flag |= TTF_STYLE_ITALIC;
  if(gras)
    flag |= TTF_STYLE_BOLD;
  if(ssln)
    flag |= TTF_STYLE_UNDERLINE;
  TTF_SetFontStyle(new_police.font,flag);
   return new_police;
}

void DeletePolice(struct PoliceTTF policettf)
{
  TTF_CloseFont(policettf.font);
}

void PrintSDLTTF(const struct PoliceTTF& police,int CouleurR,int CouleurG,int CouleurB,SDL_Surface* dest,int x,int y,char* text,...)
{
  char buf[300];
  va_list args;
  va_start(args,text);
  vsprintf(buf,text,args);
  va_end(args);
  SDL_Color couleur;
  couleur.r = CouleurR;
  couleur.g = CouleurG;
  couleur.b = CouleurB;
  SDL_Surface* TempTexte = TTF_RenderText_Solid(police.font,buf,couleur);
  if(TempTexte)
    Blit(TempTexte,0,0,TempTexte->w,TempTexte->h,dest,x,y);
  SDL_FreeSurface(TempTexte);
}
Duche
ERROR - No keyboard Connected. Press any key to continue...

le_duche
Membre
Membre

Sexe:Masculin
Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math

Feuille de personnage
Nombre de problèmes du mois résolus:
4/7  (4/7)

Revenir en haut Aller en bas

Re: Texte en SDL

Message par Julien le Sam 31 Mai - 22:54

Cool ! Very Happy

J'essaie ça demain et je te dis si ça marche ! Merci !!!

Julien
Administrateur
Administrateur

Sexe:Masculin
Messages : 6120
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur

Feuille de personnage
Nombre de problèmes du mois résolus:
0/0  (0/0)

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum